異なる区切り文字を使用してファイル内の異なる列を分割し、その一部のみを印刷する

異なる区切り文字を使用してファイル内の異なる列を分割し、その一部のみを印刷する

次の形式(複数列)のタブ区切りファイルがあります。

#CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  NORMAL
1   22  .   C   A   .   PASS    aa;bb;cc    ee:ff:rr:dd xx:vv:yy:zz
1   34  .   G   T   .   PASS    aa;bb;cc    ee:ff:rr:dd xx:vv:yy:zz
1   56  .   C   G   .   PASS    aa;bb;cc    ee:ff:rr:dd xx:vv:yy:zz

希望の出力:

1   22  C   A   .   zz  vv/yy   cc
1   34  G   T   .   zz  vv/yy   cc
1   56  C   G   .   zz  vv/yy   cc

答え1

正規表現をフィールド区切り文字として使用して、目的の結果を得ることができます。提供された例では、フィールドが:9と10のサブフィールド区切り文字であると仮定すると、;以下は特定のフィールドとサブフィールドを印刷する方法の例です。

$ awk -F'[\t;:]' '{ print $1,$2,$4,$5,$18, $10, $16, $22 }' file
1 1278229 C A . SSC=7 FREQ 40%

サブフィールドの現在の説明は不明であり、出力例ははるかに明確ではありませんが、目的の出力を得るために私の例を変更する必要があります。

更新:最後に提供された入力に基づいて、次のawkコマンドはサンプル出力を生成します。

$ awk -v FS='[\t;:]' -v OFS='\t' 'NR > 1 { print $1, $2, $4, $5, $6, $18, $16"/"$17, $10 }' infile
1   22  C   A   .   zz  vv/yy   cc
1   34  G   T   .   zz  vv/yy   cc
1   56  C   G   .   zz  vv/yy   cc
$ 

関連情報