デフォルトのファイル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.csv
。hub
bla.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番目の列があります(\t
IDの後の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番目のフィールドをその値に設定し、通常は現在の行(修正を含む)を印刷します。hub
a