#!
awk '{ for (i=1; i<=NF; i++) no[$i]++
} END{ for (word in no) printf "%-15s%5d\n", word, no[word]
}' $*
这是显示单词及其重复的命令的描述,所以我想使用 sed 和或 tr 而不是 awk,我还希望它忽略标点符号并且不区分大小写
答案1
如果单词及其最大数量已知,那么确实可以仅使用tr
和进行“计数” sed
。不过,这并不有趣,因此我只针对一个单词执行此操作,并且只出现不超过 4 次。
输入文件:
foo bar
foo bar baz
bar baz
foo
噩梦sed
:
$ tr '\n' ' ' <input |
sed -r ': start; s/((^|[^%]))foo\b/\1%foo/; T end; s/%foo/%%foo/; t start; '\
': end; : delstart; s/(foo.*) %foo\b/\1/g; t delstart' |
tr ' ' '\n' |
sed -r 's/^%%%%/4 /; s/^%%%/3 /; s/^%%/2 /; s/^%/1 /'
4 foo
bar
bar
baz
bar
baz
%
如果“计数字符”(此处: )直接出现在单词前面,则不起作用。