当字符串出现在多行中时,如何从文件中删除行?

当字符串出现在多行中时,如何从文件中删除行?

我有一个包含 2 列的文件,如下所示:

apple pear
banana pizza
spoon fork
pizza plate
sausage egg

如果一个单词出现在多行中,我想删除重复单词出现的所有行,如您所见,“pizza”出现了两次,因此应删除 2 行,以下是所需的输出:

apple pear
spoon fork
sausage egg

我知道使用:

awk '!seen[$1]++' 

但是,这只在字符串出现在一列中时删除行,我需要一个命令来检查两列。我怎样才能做到这一点?

答案1

基本的两步方法是创建一个非唯一单词列表,并将其通过管道传输到grep -v.

对于第一部分,您可以使用sortand uniq -d(在序列化单词之后 - 可能是 with tr)或者 - 如果您想继续使用awk,类似:

awk -vRS='[ \t\n]' 'seen[$0]++' file

哪个分裂记录在空白处并打印那些以前见过。所以

$ awk -vRS='[ \t\n]' 'seen[$0]++' file | grep -Fvf- file
apple pear
spoon fork
sausage egg

答案2

尝试使用以下命令

for i in `cat filename| perl -pne "s/ /\n/g"| sort| uniq`; do j=`grep -c $i p.txt`; if [[ $j -eq 2 ]]; then sr=`echo $i`; else sed -n '/'$i'/p' p.txt| sed -n '/'$sr'/!p'; fi; done| awk '{if (!seen[$0]++)print $0}'

输出

apple pear
sausage egg
spoon fork

相关内容