3

我有 2 个文本文件,并希望文件 A 中包含文件 B 中的字符串的卸妆线

档案一:

joe     ball     1335
john    dyer     1365
dylan   fisher   1795
ian     gill     1913
eric    kelly    1101

文件 B:

1795
1913

我希望 Bash 代码得到这样的结果:

joe     ball     1335
john    dyer     1365
eric    kelly    1101

我尝试了这个代码,但答案没有成功

$ grep -vwF -f A B
$ awk -F'[ ,]' 'FNR==NR{a[$1];next} !($4 in a)'
4

3 回答 3

5
awk  'NR==FNR{a[$1];next} !($3 in a)' fileB fileA

它使用空格作为字段分隔符,并且$1是一行的第一列元素,$3是该行的第三列元素。使用数组a存储 fileB 元素a[$1]。检查 fileA 的第 3 列元素是否在数组中a,如果不是则打印整行输出:

joe     ball     1335
john    dyer     1365
eric    kelly    1101
于 2016-12-19T06:58:01.883 回答
0

使用grep

$ grep -v -f B A
joe     ball     1335
john    dyer     1365
eric    kelly    1101

这是最简单的,但在某些情况下会产生冲突。例如,如果您先弄错B一点(在搜索字符串的sed开头和结尾添加空格):$

$ sed 's/$/$/;s/^/ /' B
 1795$
 1913$

并在进程替换中使用它:

$ grep -v -f <(sed 's/$/$/;s/^/ /' B) A
joe     ball     1335
john    dyer     1365
eric    kelly    1101
于 2016-12-19T09:41:45.423 回答
-1

猫文件_B | 同时读取值;做 grep $values file_A >> newfile; 完毕

于 2016-12-19T10:48:59.950 回答