2つの複数列のTABBファイル(必要に応じてCSV化可能)(4列目と8列目)の2つの列を比較し、一致しないものと新しいものを別々に印刷したい
table 1 (showing 4th, 8th columns)
100001 28/10/2020
100002 15/03/2017
table 2 (showing 4th, 8th columns)
100001 28/10/2020
100002 18/03/2017
100003 07/12/2018
一致しない印刷// 8列目のデータが異なるため(日付、3日後)
100002 18/03/2017
print new // siceレコードがテーブル1に存在しません
100003 07/12/2018
私はstackoverflowとは異なるアプローチを試し、同様の質問を確認してgoogledしました。このstackoverflowスレッドは私が見つけた最も近いものですが、それでも成功しません
このワンライナー
awk '{k=$4 FS $8} NR==FNR{a[k]; next} !(k in a)' file1 file2
new !(k in a)を出力しますが、一致しないものは出力しません。ただし、5行ではなく7行を新規として印刷する必要があります。8列目の日付スラッシュ/が影響する可能性があるのではないかと思います。それでも、それは不一致には役立ちません。
編集:@ ed-mortonのアドバイスに従って更新:
user@machine:~/testing$ cat file1
abc 123 456 100001 def ghi 789 28/10/2020
ujl 764 678 100002 htg dcf 065 15/03/2017
user@machine:~/testing$ cat file2
abc 123 456 100001 def ghi 789 28/10/2020
ujl 764 678 100002 htg dcf 065 18/03/2017
rfg 453 287 100003 grf cfe 764 07/12/2018
user@machine:~/testing$ awk 'NR==FNR{a[$4]=$8; next} a[$4] != $8' file1 file2
ujl 764 678 100002 htg dcf 065 18/03/2017
rfg 453 287 100003 grf cfe 764 07/12/2018
これはあなたが望むものかもしれません(テストされていません):
awk 'NR==FNR{a[$4]=$8; next} a[$4] != $8' file1 file2
8列目またはその他の場所のスラッシュ、または入力内の他の特定の文字は違いがありません。最初に使用したコードとこのコードは、リテラル文字列の比較を行っているだけです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加