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

问题描述 投票:0回答:2

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

我怎样才能实现我的目标?

linux bash
2个回答
2
投票

这应该足够了:

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

-v:否定 - 返回不匹配的条目 -F:修正了正则表达式匹配而不是经典正则表达式 -f:从file2读取模式 <(cut .... file2):命令替换。使用grep -f => file2的第1列的结果提供cut


1
投票

尝试:

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

这个怎么运作:

  1. -F, 这告诉awk使用逗号作为字段分隔符。
  2. FNR==NR{a[$1]=1; next} 当读取第一个文件FNR==NR时,我们将值1(true)赋值给第一个字段的键下的关联数组a。然后我们跳过其余的命令并跳转到next线上重新开始。
  3. !a[$1] 如果我们在第二个文件上,如果a[$1]不正确,我们打印该行。换句话说,如果在第一个文件file1中没有看到第一个字段,我们将从第二个文件file2打印每一行。
© www.soinside.com 2019 - 2024. All rights reserved.