別の区切り文字を挿入しながらテキストファイルの最後の4つの列をマージする方法は?

別の区切り文字を挿入しながらテキストファイルの最後の4つの列をマージする方法は?

ファイルがあります:

sample_1   sample_2   sample_3   category   subcategory   class   levels
52         59         80         wild       animal        herbe   small
25         65         71         pet        insect

希望の出力を得るために、3番目の列以降のすべての列をマージしたいと思います。

sample_1   sample_2   sample_3   info         
52         59         80         wild|animal|herbe|small
25         65         71         pet|insect

ベストアンサー1

次のawkスクリプトを考えてみましょう。

awk 'BEGIN { IFS=OFS="\t" }
     NR==1 { print "sample_1" OFS "sample_2" OFS "sample_3" OFS "info" }
     NR >1 { four=$4
             for(i=5; i <= NF; i++) four=four"|"$i
             print $1 OFS $2 OFS $3 OFS four }' input

スクリプトは3つの部分に分かれています。

  1. BEGIN- スクリプトは、入力を読み取る前に、入力フィールドと出力フィールドの区切り文字をタブに設定します。
  2. NR==1- 示されているようにタイトルが書き換えられます。
  3. NR >1- タブ(OFS)と組み合わせるために4つのフィールドを縮小します。フィールド#4で新しい値を初期化し、残りのフィールドを繰り返してその値にパイプ文字を追加します。ループが完了した後、再組み立てられたラインを印刷します。

おすすめ記事