小编Ook*_*ker的帖子

如何运行 ssh 命令直到成功?

有时我会重新启动设备,并需要ssh在设备准备就绪后重新启动。

我想每 5 秒运行一次 ssh 命令,直到命令成功。

我的第一次尝试:

watch -n5 ssh me@device.local && exit 1
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

scripting ssh watch

42
推荐指数
5
解决办法
2万
查看次数

条件块与条件语句 (if)

说我有一个文件:

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)

你可以看看有什么问题。

  • 我该如何解决这个错误?
  • 为什么会出现这个错误?
  • 条件语句和条件块有什么区别?

awk

20
推荐指数
2
解决办法
8万
查看次数

如何按特定位置的单词提取行,而不是列?

我有一个这样的输入文件:

                     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)

bash text-processing text columns

6
推荐指数
2
解决办法
2418
查看次数

使用 AWK 在块中求和(模式改变时重新开始求和)

我有一个这样的文件:

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

5
推荐指数
1
解决办法
1887
查看次数

为什么 awk 不使总和为零而是一个非常小的数字?

我有这个文件,我想对第一列中的所有数字求和。简单:

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-15to 的范围内e-17,以负号或正号表示。为了解决这个问题,我必须使用绝对值:

awk '{s+=$1;if (sqrt(s^2)<0.01) s=0;print $1,s}' file
Run Code Online (Sandbox Code Playgroud)

你知道为什么会这样吗?

awk floating-point

5
推荐指数
3
解决办法
2586
查看次数

如何用增量编号替换匹配行中的所有第一次出现?

我有一个这样的文件

...
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)

awk shell-script text-processing replace

5
推荐指数
1
解决办法
1080
查看次数

如何在 bash 中更改 Konsole 标题?

我希望每次运行循环时都更改 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"命令不起作用。

bash konsole window-title

3
推荐指数
1
解决办法
5087
查看次数