切换此输出的格式?

时间:2013-03-17 20:35:59

标签: bash

我编写了这个脚本来打印一个或多个文件中的单词分布:

cat "$@" | tr -cs '[:alpha:]' '\n' | 
tr '[:upper:]' '[:lower:]' | sort | 
uniq -c | sort -n

这给了我一个输出,如:

1 the
4 orange
17 cat

但是,我想更改它,以便首先列出单词(我假设排序将涉及其字母顺序),而不是数字,如下:

cat 17
orange 4
the 1

我只需要一个简单的选项来切换它吗?还是更复杂的东西?

1 个答案:

答案 0 :(得分:4)

将输出传输到

awk '{print $2, $1}'

或者您可以使用awk完成任务:

{
    $0 = tolower($0)    # remove case distinctions
    # remove punctuation
    gsub(/[^[:alnum:]_[:blank:]]/, "", $0)
    for (i = 1; i <= NF; i++)
        freq[$i]++
}

END {
    for (word in freq)
        printf "%s\t%d\n", word, freq[word]
}

用法:

awk -f wordfreq.awk input