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もない場合は1に設定されます。$5c

おすすめ記事