私はUbuntu 18を使用しており、Linuxコマンドの経験はほとんどありません。 2つのファイルがあります。
ファイル1:
a,txt1,v1
b,txt2,v2
c,txt3,v1
d,txt4,v2
ファイル2:
a,txt5,v2
b,txt6,v1
c,txt7,v1
d,txt8,v2
最初の列の値は同じで、3番目の列の値がからから変更された最初の列と3番目の列の値を印刷したいとv1
思いますv2
。したがって、私の予想結果は次のようになります。
a
v2
2番目のクエリは、からに変更された3番目の列値に対するものですv1
。だから私の予想結果は次のとおりです。
b
答え1
$ join -t, file1 file2 | awk -F, '$3 == "v1" && $5 == "v2" { print $1 }'
a
$ join -t, file1 file2 | awk -F, '$3 == "v2" && $5 == "v1" { print $1 }'
b
これは、両方のファイルがソートされていると仮定します。そうでない場合
join -t, <( sort file1 ) <( sort file2 ) | awk ...as above...
このjoin
コマンドは
a,txt1,v1,txt5,v2
b,txt2,v2,txt6,v1
c,txt3,v1,txt7,v1
d,txt4,v2,txt8,v2
これは、最初の列を結合キーとして使用して、2つのファイル間のリレーショナル結合の結果です。これには、同じ結合キーを持つ2つのファイルの行と各ファイルの異なるフィールドが一覧表示されます。
awk
コードはこれを見て、3列と5列に私たちが探している値がある場合にのみ最初の列を印刷します。