我在 crontab 中有一个脚本,它每 30 分钟创建一个文件,其中包含 Asterisk 中的离线对等点列表:
now=$(date +"%Y%m%d%H%M")
/usr/sbin/asterisk -rx 'sip show peers' | grep "Unspec" | sed 's/[/].*//' >> /var/log/asterisk/offline/offline_$now
我需要解析这些文件并找到始终离线的扩展名,即文件中的常量。
我该怎么做?
输出是:
/usr/sbin/asterisk -rx 'sip show peers' | grep "Unspec" | sed 's/[/].*//' | tail -3
891
894
899
ls /var/log/asterisk/offline/
offline_201309051400 offline_201309051418 offline_201309051530 offline_201309051700
offline_201309051830 offline_201309052000 offline_201309052130
offline_201309051405 offline_201309051430 offline_201309051600 offline_201309051730
offline_201309051900 offline_201309052030 offline_201309052200
offline_201309051406 offline_201309051500 offline_201309051630 offline_201309051800
offline_201309051930 offline_201309052100 offline_201309052230
最佳答案
此 awk 脚本将打印所有文件中存在的行:
awk 'FNR==1{f++}{a[$0]++}END{for (i in a) if (a[i]==f) print i}' offline_*
它是如何工作的:
- 使用
FNR==1{f++}
我们计算已解析的文件数量(每个文件的第一行 FNR 等于 1) - 使用
{a[$0]++}
我们计算每行出现的次数。 END
block 打印已找到 f 次的数组元素。
关于linux - 比较文件夹中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18633788/