2つのファイルがありますが、最初のファイルの行のみを含め、2番目のファイルは含まれていない新しいファイルをインポートしたいと思います。例:
ファイル1:
ID firstname lastname
1 John Wilkens
2 Andrea Smith
3 Matthew Freberg
4 Brenda Something
ファイル2:
ID firstname lastname
1 John Wilkens
2 Andrea Willems
3 Jay Freberg
5 Mike Hart
出力:
ID firstname lastname
4 Brenda Something
commを使ってみましたが、ID 2と3のように変更された行も表示されます。
この問題を解決するのに役立ちますか?
答え1
$ awk 'NR==FNR{a[$1]; next} FNR==1 || !($1 in a)' file2 file1
ID firstname lastname
4 Brenda Something
NR==FNR{a[$1]; next}
最初の列を使用した配列file2
キーの作成NR
これまでに読み取ったレコードの総数を追跡し、FNR
現在読み込んでいるファイルのレコード番号のみを記録します。したがって、NR==FNR
最初のファイルに対してのみ機能します(空ではないと仮定)。
FNR==1 || !($1 in a)
ファイルの場合、file1
ヘッダー行を印刷したり、配列内の最初の列が見つからない場合a
awk -F'\t' '...'
入力がタブで区切られ、awk -F, '...'
カンマで区切られた場合に使用します。
最初のファイルが空である可能性がある場合は、以下を使用してください。
awk '!f{a[$1]; next} FNR==1 || !($1 in a)' file2 f=1 file1
これにより、f
2つのファイルの間にフラグが設定されます。
答え2
Bashコマンドラインから次のことができます。 file2でIDをフィルタリングし、file1で見つけます。ただし、行の先頭でのみ探してください。
$ grep -vf <(< file2 tail -n+2 | grep -Eo '^[^ ]{1,}'|sed 's/.*/^& /') file1
ID firstname lastname
4 Brenda Something