我使用 Ubuntu 18,对 Linux 命令缺乏经验。我有两个文件:
文件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
我想打印第一列和第三列的值,其中第一列的值相同,第三列的值已从 更改v1
为v2
。所以我的预期输出应该是:
a
v2
第二个查询针对已从 更改为 的第三列值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
这是使用第一列作为连接键在两个文件之间进行关系连接的结果。这列出了两个文件中具有相同连接键的行以及每个文件中的其他字段。
awk
仅当第 3 列和第 5 列具有我们要查找的值时,代码才会查看此内容并打印第一列。