在linux中使用sed和tr代替awk

在linux中使用sed和tr代替awk
#!
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

%如果“计数字符”(此处: )直接出现在单词前面,则不起作用。

相关内容