小编Ais*_*rni的帖子

在shell脚本中检索正则表达式后的单词

我正在尝试从具有元数据的文本文件中检索特定字段,如下所示:

project=XYZ; cell=ABC; strain=C3H; sex=F; age=PQR; treatment=None; id=MLN
Run Code Online (Sandbox Code Playgroud)

我有以下脚本来检索字段 'cell'

while read line
do
cell="$(echo $line | cut -d";" -f7 )"
echo  $cell
fi
done < files.txt
Run Code Online (Sandbox Code Playgroud)

但是下面的脚本检索整个字段cell=ABC,而我只想要'ABC'字段中的值,如何在同一行代码中检索正则表达式之后的值?

regex shell

12
推荐指数
1
解决办法
7934
查看次数

带有文件头的粘贴命令

我有 178 个扩展名为 _count 的文件,我想使用以文件名作为标题的粘贴命令,例如

File1_count

abc
def 
gfh
Run Code Online (Sandbox Code Playgroud)

FILE2_count

ijk
lmn
opq
Run Code Online (Sandbox Code Playgroud)

FILE3_count

 rst
 uvw
 xyz
Run Code Online (Sandbox Code Playgroud)

.... FILE178_count

 123
 456
 789
Run Code Online (Sandbox Code Playgroud)

这样当我粘贴 *_count 时,我将使用粘贴命令获取标题为

 FILE1 FILE2  FILE3   ....  FILE178
  abc    ijk    rst            123
  def    lmn    uvw            456
  gfh    opq    xyz            789
Run Code Online (Sandbox Code Playgroud)

unix command file paste

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

在awk中除以零值

我计算的平均分如下:

average_score=$(awk "BEGIN {printf \"%.2f\",${sum_of_score}/${number_of_lines}}")
Run Code Online (Sandbox Code Playgroud)

其中sum_of_scores按每个greped ID计算如下:

sum_of_score=$(grep 271712:E1 M10.6.txt | awk '{s+=$5} END {print s}')

number_of_lines=$(grep 271712:E1 M10.6.txt | awk 'END{print FNR}')
Run Code Online (Sandbox Code Playgroud)

但是有时sum_of_score和/或number_of_lines的值可能为零,因此我收到错误:

awk: BEGIN {printf "%.2f",/0}
awk:                       ^ unterminated regexp
awk: cmd. line:1: BEGIN {printf "%.2f",/0}
awk: cmd. line:1:                         ^ unexpected newline or end of string
Run Code Online (Sandbox Code Playgroud)

我该如何处理这个错误?

math awk division

0
推荐指数
1
解决办法
293
查看次数

将前缀添加到shell之前的行中

我正在执行以下命令来获取必须从其上方的行添加前缀的行,如下所示:

 grep -B1 "^E[0-9]"
Run Code Online (Sandbox Code Playgroud)

我得到的东西如下:

ENSG00000165661:E5.1
E6.1
--
ENSG00000174776:E7.1
E8.1
--
ENSG00000122482:E7.2
E8.1
Run Code Online (Sandbox Code Playgroud)

如何为以E [字母数字]开头的行添加前缀,使文件成为

 ENSG00000165661:E5.1
 ENSG00000165661:E6.1
 ENSG00000174776:E7.1
 ENSG00000174776:E8.1
 ENSG00000122482:E7.2
 ENSG00000122482:E8.1
Run Code Online (Sandbox Code Playgroud)

shell awk grep lines prefix

0
推荐指数
1
解决办法
58
查看次数

标签 统计

awk ×2

shell ×2

command ×1

division ×1

file ×1

grep ×1

lines ×1

math ×1

paste ×1

prefix ×1

regex ×1

unix ×1