我在2
中有Linux
文件,如下所示
file1
test_1
test_3
test_5
test_6
file2
test_1,smoke_test
test_2,rain_test
test_3,sun_test
test_4,wind_test
我想比较这两个文件并删除file1
中的表格,这些表格在file2
之前是comma(,)
之前的第一部分
需要输出:
file3
test_5
test_6
我尝试过如下
comm -23 <(sort file1) <(sort file2)
output achieved
test_1
test_3
test_5
test_6
我怎样才能实现我的目标?
这应该足够了:
$ grep -v -Ff <(cut -d',' -f1 file2) file1 >file3
-v
:否定 - 返回不匹配的条目
-F
:修正了正则表达式匹配而不是经典正则表达式
-f
:从file2读取模式
<(cut .... file2)
:命令替换。使用grep -f
=> file2的第1列的结果提供cut
尝试:
$ awk -F, 'FNR==NR{a[$1]=1; next} !a[$1]' file2 file1
test_5
test_6
这个怎么运作:
-F,
这告诉awk使用逗号作为字段分隔符。FNR==NR{a[$1]=1; next}
当读取第一个文件FNR==NR
时,我们将值1(true)赋值给第一个字段的键下的关联数组a
。然后我们跳过其余的命令并跳转到next
线上重新开始。!a[$1]
如果我们在第二个文件上,如果a[$1]
不正确,我们打印该行。换句话说,如果在第一个文件file1
中没有看到第一个字段,我们将从第二个文件file2
打印每一行。