我编写了这个脚本来打印一个或多个文件中的单词分布:
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
我只需要一个简单的选项来切换它吗?还是更复杂的东西?
答案 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