有时我会重新启动设备,并需要ssh
在设备准备就绪后重新启动。
我想每 5 秒运行一次 ssh 命令,直到命令成功。
我的第一次尝试:
watch -n5 ssh me@device.local && exit 1
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
说我有一个文件:
PRO 1
GLN 5.55112e-17
ILE -6.245e-17
THR 5.55112e-17
Run Code Online (Sandbox Code Playgroud)
我希望第二列中数字不等于 1 的每一行都将其更改为 0 并保留其余部分。
如果我使用if
(即条件语句),一切正常:
awk '{if($2!=1){print $1,"0"}else{print $0}}' file
PRO 1
GLN 0
ILE 0
THR 0
Run Code Online (Sandbox Code Playgroud)
但是当我使用条件块时,会发生一些不希望的事情:
awk '$2!=1 {print $1,"0"} {print $0}' file
PRO 1
GLN 0
GLN 5.55112e-17
ILE 0
ILE -6.245e-17
THR 0
THR 5.55112e-17
Run Code Online (Sandbox Code Playgroud)
你可以看看有什么问题。
我有一个这样的输入文件:
v
ATOM 57 O LYS A 7 2.254 25.484 18.942 1.00 14.46
ATOM 77 NH1AARG A 8 5.557 19.204 13.388 0.55 24.50
TER 1648 ILE C 206
HETATM 1668 O HOH A1023 25.873 38.343 2.138 1.00 21.99
^
Run Code Online (Sandbox Code Playgroud)
只有A
在标记位置包含的行才是我需要的。在大多数行中,A
与第一行一样,将单个字符作为第五列。但是,有时它会像第二行一样位于第四列,或者像最后一行一样位于字符串中。请注意,A
单个字符可以出现在 22 以外的位置,但我只关心它何时出现。
我需要我的输出只有带有 的行A
,无论它是单行还是字符串:
ATOM 57 O LYS A 7 2.254 25.484 18.942 1.00 14.46
ATOM 77 NH1AARG A 8 5.557 19.204 13.388 0.55 24.50
HETATM 1668 O HOH A1023 25.873 38.343 …
Run Code Online (Sandbox Code Playgroud) 我有一个这样的文件:
A 100
A 200
A 300 #sum=600
B 400
B 500 #sum=900
A 600
A 700
A 800 #sum=2100
Run Code Online (Sandbox Code Playgroud)
我希望输出是:
A 600
B 900
A 2100
C sum_of_C
D sum_of_D
Run Code Online (Sandbox Code Playgroud)
我可以用for
, sed
,grep
和来做到这一点awk
。
但是因为我正在学习awk
,我想写一个awk
脚本。到目前为止,我有:
if (${NR {print $1}} == ${NR-1 {print $1}})
sum+=$2
print $0"\t"sum
else
sum=$2
print $0"\t"sum
Run Code Online (Sandbox Code Playgroud)
awk -f awkscript file
没有成功。解决办法是什么?
我有这个文件,我想对第一列中的所有数字求和。简单:
awk '{s+=$1;print $1,s}' file
0.1048 -1.2705
0.4196 -0.8509
0.4196 -0.4313
0.2719 -0.1594
0.0797 -0.0797
0.0797 -5.55112e-17 #Notice this line
Run Code Online (Sandbox Code Playgroud)
你看,最后一个应该是 0。我知道那e-17
是零,但有时输出正好是 0。如果它不是 0,则输出在e-15
to 的范围内e-17
,以负号或正号表示。为了解决这个问题,我必须使用绝对值:
awk '{s+=$1;if (sqrt(s^2)<0.01) s=0;print $1,s}' file
Run Code Online (Sandbox Code Playgroud)
你知道为什么会这样吗?
我有一个这样的文件
...
1562 first part
1563 H col3 H col4
1564 H col3 H col4
...
3241 H col3 H col4
3242 third part
...
Run Code Online (Sandbox Code Playgroud)
我只想将H
每一行中的第一个替换为H#
,#
是它的出现次数。输出应该是:
...
1562 first part
1563 H1 col3 H col4
1564 H2 col3 H col4
...
3241 H1652 col3 H col4
3242 third part
...
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试过:
max=`grep -c ' H ' b`
while [[ "$i" -le $max ]];do
grep -m $i ' H ' b|tail -n1|sed "s/H/H$i/1"
let i=i+1 …
Run Code Online (Sandbox Code Playgroud) 我希望每次运行循环时都更改 Konsole 标题,如下所示:
while read line; do
echo $line $i/$numline
echo -ne "\033]0;$line $i/$numline\007"
commands
let i=i+1
done<text
Run Code Online (Sandbox Code Playgroud)
我发现该echo -ne "\033]0;text\007"
命令不起作用。