bash - 删除包含 2 个单词的重复行
问题描述
我有一个文件,其中保存了我的 newdir 和完成目录:
newdir 26.01.2020_17:28 Directory1
finish 26.01.2020_17:28 Directory1
newdir 26.01.2020_17:29 Directory2
finish 26.01.2020_17:29 Directory2
newdir 26.01.2020_17:28 Directory3
finish 26.01.2020_17:28 Directory4
newdir 26.01.2020_17:29 Directory5
finish 26.01.2020_17:29 Directory3
newdir 26.01.2020_17:28 Directory6
finish 26.01.2020_17:28 Directory6
newdir 26.01.2020_17:29 Directory7
finish 26.01.2020_17:29 Directory7
newdir 26.01.2020_17:28 Directory8
finish 26.01.2020_17:28 Directory9
newdir 26.01.2020_17:29 Directory10
finish 26.01.2020_17:29 Directory11
我想删除目录名称和 newdir 并完成匹配的所有位置。或者换一种说法:目录名称是否与 newdir 协商并完成,然后在文件中将其删除
示例: Directory2 具有 newdir 并完成,然后在文件中将其删除
newdir 26.01.2020_17:29 Directory2
finish 26.01.2020_17:29 Directory2
不幸的是我没有办法解决..有人可以帮助我吗?
谢谢。
问候
编辑:文件中的预期结果:
finish 26.01.2020_17:28 Directory4
newdir 26.01.2020_17:29 Directory5
newdir 26.01.2020_17:28 Directory8
finish 26.01.2020_17:28 Directory9
newdir 26.01.2020_17:29 Directory10
finish 26.01.2020_17:29 Directory11
解决方案
我会这样做,但 awk 也可能是一个好方法。
sort -k3 dirlist | uniq -u -f2
它将按第 3 列对文件 dirlist 进行排序,并根据第 3 列仅获取唯一行。
输出
newdir 26.01.2020_17:29 Directory10
finish 26.01.2020_17:29 Directory11
finish 26.01.2020_17:28 Directory4
newdir 26.01.2020_17:29 Directory5
newdir 26.01.2020_17:28 Directory8
finish 26.01.2020_17:28 Directory9
编辑
使用 awk(这也将保留顺序)
awk '{seen[$3]++; line[++count]=$0; key[count]=$3}
END{
for(i=1; i <= count; i++)
if(seen[key[i]] == 1)
print line[i]
}' dirlist
推荐阅读
- php - 从 URI 获取激活密钥字符串
- javascript - 三.js点击动作(requestAnimationFrame)
- javascript - 使用 Puppeteer 获取控制台结果(对象)
- google-bigquery - 如果表存在于 WITH 子句 (BigQuery) 中,则选择
- ios - 将动态数据平滑应用于 CorePlot 图
- c# - 在我使用域时更改服务器 IP 后 HttpWebRequest 不起作用
- c++ - 为什么这个程序会编译?它应该不会出错,因为我要删除两次相同的东西
- python - 文本预处理中更快的拼写纠正
- jquery - Jquery将左右内容滑出屏幕
- javascript - 如何在具有本地存储的对象中添加对象?