如果 col1 与 col4/col5 匹配,则分别在 col1 的空行中打印 col4/col5 中的所有值

如果 col1 与 col4/col5 匹配,则分别在 col1 的空行中打印 col4/col5 中的所有值

我在 Linux 机器上有一个逗号分隔的文本文件。首先,我想将 col1 与 col4 和 col5 匹配,如果 col1 与 col4 匹配,则打印 col1 为空的所有行中 col4 的所有值,如果 col1 与 col5 匹配,则打印 col1 为空的所有行中第 5 列的所有值,直到新值出现在第 1 列中。输入文件:

va,group,subgroup,minor,major 
A,AGT,rs123,A,G
 ,AGT,rs456,G,T
 ,AGT,rs457,T,G
 ,AGT,rs667,A,T
G,GSTT1,rs234,A,G
 ,GSTT1,rs668,T,G
 ,GSTT1,rs556,A,G

预期输出:

va,group,subgroup,minor,major 
A,AGT,rs123,A,G
G,AGT,rs456,G,T
T,AGT,rs457,T,G
A,AGT,rs667,A,T
G,GSTT1,rs234,A,G
G,GSTT1,rs668,T,G
G,GSTT1,rs556,A,G

这是我尝试过的:

if [ $1 == $4] && [ -z "$1" ]
then
   awk -F"\t -v OFS="\t" '{ for(N=1; N<=NF; N++) if($N=="") $N=$4 } 1' file > tmp1
else
  echo "stop"
fi

答案1

你可以使用这样的东西:

awk '
  BEGIN{FS=OFS=","; c=1}
  $1==" "{$1=$c;print;next}
  {c=1}
  $1==$4{c=4}
  $1==$5{c=5}1
' file
  • 如果$4和都$5匹配,则优先于最后一个(此处:$5)。
  • 如果第一行为空或既不匹配$4也不$5匹配, c将设置为 1。

相关内容