cos*_*ist 11 sed awk text-processing
我有一个看起来像这样的文件:
ID101 G T freq=.5 nonetype ANC=.1 addinfor
ID102 A T freq=.3 ANC=.01 addinfor
ID102 A T freq=.01 type=1 ALT=0.022 ANC=.02 addinfor
Run Code Online (Sandbox Code Playgroud)
如您所见,每行的列数略有不同。我特别想要第 1 列、第 2 列、第 3 列、第 4 列和以ANC=
期望的输出:
ID101 G T freq=.5 ANC=.1
ID102 A T freq=.3 ANC=.01
ID102 A T freq=.01 ANC=.02
Run Code Online (Sandbox Code Playgroud)
我一般使用 awk 命令来解析文件:
awk 'BEGIN {OFS = "\t"} {print $1, $2, $3, $4}'
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以更改此命令以适用于此类情况?
我认为这样的事情可能会奏效:
awk '{for(j=1;j<=NF;j++){if($j~/^ANC=/){print $j}}}'
Run Code Online (Sandbox Code Playgroud)
但是,如何编辑它以打印第一列?
cha*_*aos 16
与awk:
awk '{for(i=5;i<=NF;i++){if($i~/^ANC=/){a=$i}} print $1,$2,$3,$4,a}' file
Run Code Online (Sandbox Code Playgroud)
for(...)循环遍历所有字段,从字段 5 ( i=5) 开始。
if($i~/^ANC=/) 检查该字段是否以 ANC=a=$i 如果是,将变量 a 设置为该值print $1,$2,$3,$4,a打印字段 1-4,然后是存储在a.BEGIN {OFS="\t"}当然可以结合。