Jon*_*y P 1 sorting bash awk sed
我有一个具有2列的文件,如下所示:
apple pear
banana pizza
spoon fork
pizza plate
sausage egg
Run Code Online (Sandbox Code Playgroud)
如果一个单词出现在多行中,我想删除重复出现的单词的所有行,如您所见,“比萨饼”出现了两次,因此应删除2行,以下是必需的输出:
apple pear
spoon fork
sausage egg
Run Code Online (Sandbox Code Playgroud)
我知道使用:
awk '!seen[$1]++'
Run Code Online (Sandbox Code Playgroud)
但是,这仅在字符串出现在一列中时才删除行,我需要一条将检查两列的命令。我怎样才能做到这一点?
您可以使用grep
和来分多个步骤解决问题uniq -d
。
首先,使用生成所有单词的列表grep -Eo '[^ ]+'
。然后过滤该列表,以便仅保留重复的单词。可以使用进行过滤… | sort | uniq -d
。最后,从先前使用生成的列表中打印不包含任何单词的所有行grep -Fwvf listFile inputFile
。
在bash
所有这些步骤可以在一个单一的命令来运行。在这里,我们将使用变量$in
使其易于适应。
in="path/to/your/input/file"
grep -Fwvf <(grep -Eo '[^ ]+' "$in" | sort | uniq -d) "$in"
Run Code Online (Sandbox Code Playgroud)