uniq -c的和出现输出

时间:2014-01-04 11:26:22

标签: scripting awk uniq

我想总结“uniq -c”命令的出现输出。 我怎么能在命令行上这样做?

例如,如果我在输出中得到以下内容,我将需要250。

 45 a4
 55 a3
  1 a1
149 a5

5 个答案:

答案 0 :(得分:7)

awk '{sum+=$1} END{ print sum}'

答案 1 :(得分:2)

这应该可以解决问题:

awk '{s+=$1} END {print s}' file

或者只是通过

将其传输到awk
uniq -c whatever | awk '{s+=$1} END {print s}'

答案 2 :(得分:0)

对于每一行,将第一列的值添加到SUM,然后打印出SUM

的值

awk是更好的选择

uniq -c somefile | awk '{SUM+=$1}END{print SUM}'

但您也可以使用bash

实现逻辑
uniq -c somefile | while read num other
do
   let SUM+=num;
done
echo $SUM

答案 3 :(得分:0)

要获得唯一行的总和,而不是 uniq -c | <somecommand>,只需使用 uniq | wc -l

答案 4 :(得分:0)

uniq -c 比 awk 慢。就像真的很慢。

{mawk/mawk2/gawk} 'BEGIN { OFS = "\t" } { freqL[$1]++; } END {  # modify FS for that
                                                                # column you want
   for (x in freqL) { printf("%8s %s\n", freqL[x], x) } }'      # to uniq -c upon

如果你的输入不像 100MB+ 那样大,那么加入后 gawk 就足够了

PROCINFO["sorted_in"] = "@ind_num_asc";  # gawk specific, just use gawk -b mode

如果它真的很大,那么使用mawk2然后pipe到to要快得多

   { mawk/mawk2 stuff... } | gnusort -t'\t' -k 2,2