打印以特定字符串开头的列

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"}当然可以结合。