一段统计文本单词个数的shell代码,实在是看不懂,谁能帮着解释下~

#!/bin/bash#if[$#-ne2-a$#-ne1];thenecho"usage:'basename$0'[n]Input_File"echoexitfiif[... #!/bin/bash
#

if [ $# -ne 2 -a $# -ne 1 ];then
echo "usage: 'basename $0' [n] Input_File"
echo
exit
fi

if [ $# -eq 1 ]
then
I_TOP=10
I_FILE=$1
fi

if [ $# -eq 2 ]
then
I_TOP=$1
I_FILE=$2
fi

tr -sc "[A-Z][a-z]" "[\012*]" < $I_FILE | \
tr "[A-Z]" "[a-z] " | \
sort | \
uniq -c | \
sort -k1 -n -r | \
head -$I_TOP | nl
具体思路是这样,
将所有大小写英文字母之外的字符转化为一个回车并将多个回车压缩为一个2. 将所有大写字母转换为小写3. 排序,结果是按字典顺序排好的单词列表,相同的单词挨在一起4. 在每个单词之前显示此单词出现的次数5. 按照出现的次数降序排序6. 取前 n 行输出7. 输出时加上序号
但是代码实在看不懂啦~
展开
 我来答
deeperer
2014-05-20 · 超过16用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:28万
展开全部
#!/bin/bash


if [ $# -ne 2 -a $# -ne 1 ];then                             #程序运行时若输入参数少于两个,则提示错误

  echo "usage: 'basename $0' [n] Input_File"     #-ne表示不等于,-a表示与运算

  echo                                                                 #用法:默认输入一个参数代表文件名,输入两

  exit                                                                   #个参数第一个代表显示行数。

fi


if [ $# -eq 1 ]                     #如果输入一个参数,则默认显示行数为10行。

then

  I_TOP=10

  I_FILE=$1

fi


if [ $# -eq 2 ]                    #如果输入两个参数,则第一个为显示行数,第二个为要处理的文件。

then 

  I_TOP=$1

  I_FILE=$2

fi


tr -sc "[A-Z][a-z]" "[\012*]" < $I_FILE | \        #tr命令你可以自己查找一下帮助,大意是除了大小写字母之外的字符都转化为回车,<是输出重定向,|是管道符,\是续行符

tr "[A-Z]" "[a-z] " | \                      #大写转化成小写

sort | \                                         #重新排序

uniq -c | \                                    #uniq 的用法

sort -k1 -n -r | \                           #sort 的用法

head -$I_TOP | nl                      #输出

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式