awk - 使用 awk 删除重复结果
问题描述
我有一个给定的库列表,需要在特定文件夹中找到它们并提供摘要报告。
我做了什么:
- 我将库放入一个文件中,每个库都在一行中
- 我在 while 循环中使用 readline 读取每一行(lib)
- 使用 find 命令检查它们并使用 awk 过滤
while IFS= read -r line;
do find DIR1 DIR2 DIR3 -type f -name $line | awk -v pattern=$line -F/ '{print $1"\t"pattern"\t\t"$4}';
done < libList
Liblist 就像
libA
libB
libC
.
.
结果如下所示,但前 4 个结果实际上与我不想考虑某些子文件夹中存在 libs 相同。
我怎么能只显示一次那些重复的?我如何按第一个 DIR 然后 Lib 名称然后 Example 对结果进行排序?
我知道这 '!_[$0]++'
消除了重复,但在我的情况下,我认为需要对像 A[$1$4]++ 这样的东西进行条件处理,但不能真正解决它以及如何将模式放在那里 A[$1$2]B[pattern]++ ?
**DIR3 libA example1
DIR3 libA example1
DIR3 libA example1
DIR3 libA example1**
DIR3 libB example2
DIR3 libB example2
DIR3 libB example1
DIR3 libB example1
DIR3 libB example1
DIR3 libB example1
DIR2 libC example3
DIR2 libC example3
DIR3 libC example3
DIR3 libC example3
DIR3 libC example2
DIR3 libC example2
DIR3 libC example1
DIR3 libC example1
DIR3 libC example1
DIR3 libC example1
DIR1 libD example2
DIR1 libD example2
DIR3 libD example2
DIR3 libD example2
DIR3 libD example1
DIR3 libD example1
DIR2 libE example4
DIR2 libE example4
DIR2 libC example3
DIR2 libC example3
解决方案
这可能是您正在寻找的:
while IFS= read -r line; do
find DIR1 DIR2 DIR3 -type f -name "$line"
done < libList |
awk -F'/' -v OFS='\t' '{print $1, $NF, "", $4}' |
sort -u
但没有看到它的几行样本输出find DIR1 DIR2 DIR3 -type f -name "$line"
是一个猜测。
你可以使用
awk -F'/' -v OFS='\t' '{val=$1 OFS $NF OFS OFS $4} !seen[val]++{print val}'
awk '...' | sort -u
如果您愿意,可以代替上面的。
推荐阅读
- azure - 是否可以在没有 VSCode 的情况下将 Web 应用程序部署到天蓝色?
- python - 如何使用 CSV 库在 python 中打开 CSV?
- mysql - Mysql INNER 加入和搜索结果与完全匹配
- python - 打印阿拉伯语 - 当段落在使用bid后呈现在具有多行的块中时,行的顺序是相反的
- javascript - 与 MongoDB 有多个连接正常吗?
- anylogic - 在 Anylogic 中跟踪运输车的行驶距离 [已解决]
- javascript - 按索引从 Gutenberg 块中的数组中删除项目
- asp.net-web-api - Blazor API 项目能否与客户端共享相同的 localhost 端点?
- python - 查找函数类型
- python - 根据里面的评论记录和详细说明单个脚本