【发布时间】:2020-07-30 13:25:05
【问题描述】:
我有一个给定的库列表,需要在特定文件夹中找到它们并提供摘要报告。
我做了什么:
- 我把库放到一个文件里,每个库都排成一行
- 我在 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 个结果实际上是相同的 因为我不想考虑某些子文件夹中是否存在库。
我怎样才能只显示一次那些重复的? 如何按第一个 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
【问题讨论】:
-
如果已经排序,添加
|uniq,否则添加|sort|uniq:-P -
我知道 uniw,但是当我在 awk 的尾部添加“uniq”时,所有结果都会以一种有趣的方式扭曲。我记得有一种方法可以做到这一点,例如 if ( !_A[$1$4] );print... 对字段进行分组并创建分组条件有什么想法吗?
-
将输出重定向到文件并使用 uniq 吗?结果又以何种方式“扭曲”?
-
我想我应该摆脱所有的while循环并在awk中运行awk命令调用系统,现在while循环每次迭代都会传递一行,所以awk无法进行比较..
-
是的 Chatterone 它出现在我的脑海中,然后它会给出请求 我试过了 谢谢,我没有创建另一个文件,我更愿意在旅途中解决所有问题,但它可以,因为它给了我什么想要。
标签: awk conditional-associations