基于另一个文件从linux文件中删除

时间:2017-12-20 21:41:24

标签: linux bash

我在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

我想比较这两个文件并删除file1file2comma(,)

之前的第一部分file3中的表格

需要输出:

test_5 test_6

comm -23 <(sort file1) <(sort file2)

我试过以下

output achieved

test_1 test_3 test_5 test_6

{{1}}

我如何实现我的目标?

2 个答案:

答案 0 :(得分:2)

这应该足够了:

$ grep -v -Ff <(cut -d',' -f1 file2) file1 >file3

-v:否定 - 返回不匹配的条目
-F:修正了正则表达式匹配而非经典正则表达式 -f:从file2读取模式 <(cut .... file2):命令替换。根据{{​​1}} =&gt;的结果输入grep -f file2的第一列

答案 1 :(得分:1)

尝试:

GEOADD users 40.0 -73.0 foo

工作原理:

  1. $ awk -F, 'FNR==NR{a[$1]=1; next} !a[$1]' file2 file1 test_5 test_6

    这告诉awk使用逗号作为字段分隔符。

  2. -F,

    当读取第一个文件FNR==NR{a[$1]=1; next}时,我们将值1(true)赋给第一个字段的键下的关联数组FNR==NR。然后我们跳过其余的命令并跳转到a行重新开始。

  3. next

    如果我们在第二个文件上,如果!a[$1]不正确,我们会打印该行。换句话说,如果在第一个文件a[$1]中看到第一个字段 ,我们会从第二个文件file1打印每一行。