Linux grep pipe - PullRequest
       7

Linux grep pipe

0 голосов
/ 02 августа 2011

У меня есть файл input.txt, содержащий список чисел:

1719
194
1719
1719
194
1135
194

Я хочу создать output.txt, используя трубу grep, чтобы отсортировать их в порядке возрастания числа появлений, а именно:

194: 3 times
1719: 2 times
1135: 1 time.

Есть предложения?

Ответы [ 4 ]

3 голосов
/ 02 августа 2011

Предполагая, что числа находятся в 6910460.txt без пустых строк:

$ cat 6910460.txt | sort | uniq -c | sort -nr
3  194
2 1719
1 1135

Или, если вам также нужен текст "times", вы можете добавить команду awk:

$ cat 6910460.txt | sort | uniq -c | sort -nr | \
    awk 'BEGIN {FS=OFS=" "} \
        {temp=$2; $2=$1; $1=temp} {printf "%4i %4i time(s)\n", $1, $2}'

Что напечатало бы:

 194    3 time(s)
1719    2 time(s)
1135    1 time(s)
2 голосов
/ 02 августа 2011
awk '
    {count[$0]++} 
    END {for (n in count) {print n ": " count[n] " times"}}
' file |
sort -nr -k2
0 голосов
/ 02 августа 2011

У меня сейчас нет Linux под рукой, но мне бы хотелось вот такой работы:

cat input.txt | sort | uniq -c | sort -g
0 голосов
/ 02 августа 2011
echo "1719
194
1719
1719
194
1135
194" | sort -n | uniq -c 
      3 194
      1 1135
      3 1719

Достаточно ли этого, или вы можете сами поменять значения?

...