Shell

如果 col1 與 col4/col5 匹配,則分別在 col1 的空行中列印 col4/col5 中的所有值

  • December 7, 2021

我在 Linux 機器上有一個逗號分隔的文本文件。首先,我想將 col1 與 col4 和 col5 匹配,如果 col1 與 col4 匹配,則在 col1 為空的所有行中列印 col4 中的所有值,如果 col1 與 col5 匹配,則在 col1 為空的所有行中列印列 5 中的所有值,直到一個新值出現在 column1 中。輸入文件:

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

你可以使用這樣的東西:

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。

引用自:https://unix.stackexchange.com/questions/680482