我正在尝试使用OpenMP,我只是想编写一个小的shell脚本来计算每个线程输出的行数。并简单地吐出每个计数。 我开始进入它,并开始编写带有硬编码或参数化上限和grep -c REG_EX的for循环,我还尝试使用sed首先清理额外的输出以使greps工作更容易,但它不像我想的那样工作
EXAMPLE PROGRAM OUT(SCRIPT INPUT)
Output to STDOUT (I can obviously pipe into sort first):
Thread 0: EXTRA OUTPUT
Thread 0: EXTRA OUTPUT
Thread 2: EXTRA OUTPUT
Thread 3: EXTRA OUTPUT
Thread 0: EXTRA OUTPUT
Thread 1: EXTRA OUTPUT
.
.
.
ETC
我所需要的只是:
Thread 0: #repeats
Thread 1: #repeats
.
.
.
Thread n: #repeats
提前致谢
答案 0 :(得分:3)
只需输出输出:
grep -o "Thread [0-9]*" | sort | uniq -c | awk '{print $2, $3 ":", $1}'
这将首先将每一行减少到冒号之前的部分(以便给定线程输出的每一行相同),计算每个线程输出的行数,并重新排列uniq
的输出以匹配您的样本输出。
答案 1 :(得分:1)
你可以将grep的输出传递给wc(“字数”),它带有-l标志,将计算行数:
grep needle haystack.txt | wc -l
答案 2 :(得分:1)
for i in {0..10}; do
str="Thread $i:"
cnt=$(grep -c "$str" input)
echo "$str $cnt"
done
答案 3 :(得分:1)
我认为awk
就足够了。这适用于任意数量的线程..
awk -F ":| " '{a[$2]++; if($2>max) max=$2;} END {for (i=0; i<=max; i++) print "Thread "i": "a[i]}' output
对于您的示例,它将生成..
Thread 0: 3
Thread 1: 1
Thread 2: 1
Thread 3: 1
答案 4 :(得分:0)
要获得不匹配模式的行,请使用
grep -v 'pattern' file
获取行,
grep 'pattern' file
要算,
grep -v 'foo' bar.txt | wc -l
(与'foo'不匹配的行数)
grep 'foo' bar.txt | wc -l
(匹配'foo'的行数#)
这似乎是标题所要求的,但我不得不承认,你的帖子让我困惑
答案 5 :(得分:0)
你需要的只是awk:
<infile awk '{ h[$1" "$2]++ } END { for(k in h) print k, h[k] }'
输出:
Thread 0: 3
Thread 1: 1
Thread 2: 1
Thread 3: 1
如果您只想计算以“Thread”开头的行,请在第一个块前面加上$1 == "Thread" { h[$1" "$2]++ } ...
。