Answers:
我会使用tr
而不是awk:
echo "Lorem ipsum dolor sit sit amet et cetera." | tr '[:space:]' '[\n*]' | grep -v "^\s*$" | sort | uniq -c | sort -bnr
tr
只是用换行符替换空格grep -v "^\s*$"
修剪空行sort
准备作为输入 uniq
uniq -c
计算发生次数sort -bnr
忽略空格时以数字相反的顺序排序 哇。事实证明,这是计算每线发誓的好命令
找 。-name“ * .py” -exec cat {} \; | tr'[:space:]''[\ n *]'| grep -v“ ^ \ s * $” | 排序| uniq -c | 排序-bnr | grep他妈的
-g
(--general-numeric-sort
)选项sort
在某些情况下可能更可取。例如,sort -n
将保持10\n1 4
原样,将1 4
视为14
,而sort -g
将正确地将其视为1 4\n10
。
echo "Lorem ipsum dolor sit sit amet et cetera." | tr ' ' '\n' | grep -v "^$" | sort | uniq -c | sort -bnr
请注意,我是初学者,所以我可能是错的,请随时提出建议。
要将输入拆分为单词,请用换行符替换您认为是单词分隔符的任何字符。
<input_file \
tr -sc '[:alpha:]' '[\n*]' | # Add digits, -, ', ... if you consider
# them word constituents
sort |
uniq -c |
sort -nr
不使用grep和awk,但这似乎可以满足您的要求:
for w in `cat maxwell.txt`; do echo $w; done|sort|uniq -c
2 a
1 A
1 an
1 command
1 considered
1 domain-specific
1 for
1 interpreter,
2 is
1 language.
1 line
1 of
set -f
),并且将标点符号视为单词的一部分(将标点符号添加到单词中会难于解决IFS
-祝您支持非ASCII字符集,这很麻烦),则此方法将无效。对于非常大的输入文件,这将是不好的,因为它将整个文件存储在内存中(sort
更智能)。
file=/home/stefan/ooxml1.txt
for word in $(sed 's/[^A-Za-z]/ /g' $file | tr " " "\n" | sort -u)
do
echo -n "$word "
grep -c $word $file
done | sort -k2 -n
将文件拆分为单词后,升序排序。
简单的grep将fish
在中找到fisheye
,因此您必须增强grep命令以防止部分匹配。
在传统的HDD(IDE)时代,一台机器上的25k文本文件大约需要3s。
对于较大的文件或经常执行的操作,使用哈希映射方法会更好,但是对于很少运行的作业或仅较小的文件,这可能就足够了。
tr -s
来处理多个空间,尤其是在遇到缩进时。