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