Uniq
如何使用 uniq 刪除重複行塊?
無論如何使用
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
$ awk '!a[$0]++' file calling config() running main loop time=0 output from Rank 0
從 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