无论如何,是否可以使用uniq
(或类似的)从日志类型输出中过滤/删除重复行集?我正在调试 MPI 代码,其中多个处理器经常打印相同的精确输出。uniq
当输出是一行时效果很好,但代码经常会生成多行。这是一个例子:
calling config()
calling config()
calling config()
running main loop
time=0
running main loop
time=0
running main loop
time=0
output from Rank 0
被过滤uniq
(不带选项):
calling config()
running main loop
time=0
running main loop
time=0
running main loop
time=0
output from Rank 0
有没有一种简单的方法来过滤n行块?我已经阅读并重读了联机帮助页,但找不到任何明显的内容。谢谢!
更新:我希望输出将重复的块压缩为单个条目,因此在上面的示例中:
calling config()
running main loop
time=0
output from Rank 0
答案1
$ awk '!a[$0]++' file
calling config()
running main loop
time=0
output from Rank 0
答案2
来自 uniq 手册页:
注意:“uniq”不会检测重复的行,除非它们相邻。
但你可以用一个简短的 bash 脚本来做到这一点,如下所示:
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n'
declare -r file=${1:?Please enter a filename to treat as first parameter}
linenum=0
for line in $(cat "${file}"); do
linenum="$((linenum + 1))"
freq=$(sed -n "1,${linenum} p" "${file}" | grep -c "${line}")
[[ ${freq} == 1 ]] && echo "${line}"
done
在你的情况下会产生:
calling config()
running main loop
time=0
output from Rank 0