2つのファイルの共通キーを使用しますが、awkを使用して特定の列に値を印刷する方法

2つのファイルの共通キーを使用しますが、awkを使用して特定の列に値を印刷する方法

デフォルトのファイルbla.tsv(FS = \t)があります。

id hub fil plop
34  ji ji
54  jo jo
46  ja ja

そして情報ファイルhub.csv(FS = ,):

34,fuse
46,fose

情報を次の列に印刷したいと思いますhub.csvhubbla.tsv

id hub fil plop
34 fuse ji ji
54  jo jo
46 fose ja ja

正しい行に正しい情報を印刷しましたが、最後の列の次の列に印刷しました。

awk -v OFS="\t" 'NR==FNR{a[$1]=$2;next}{print $0,a[$1]}' FS="," hub.csv FS="\t" bla.tsv > result.tsv

(存在する場合)bla.tsvの値で2番目の列をどのように入力できますか?hub.csvの構造はbla.tsvすでに「正確」です。つまり、ヘッダーの後のすべての行に空の2番目の列があります(\tIDの後の2つの連続した列)。

ベストアンサー1

形式がbla.tsvすでに正確で、2番目の列が空であるため、方法を最小限に変更するだけです。

awk -v OFS="\t" 'NR==FNR{a[$1]=$2;next} ($1 in a){$2=a[$1]} 1' FS="," hub.csv FS="\t" bla.tsv > result.tsv

処理中にIDに配列の一致する値があることをbla.tsv確認してください。その場合は、2番目のフィールドをその値に設定し、通常は現在の行(修正を含む)を印刷します。huba

おすすめ記事