【发布时间】:2015-05-24 22:43:23
【问题描述】:
我有一个听起来像这样的问题:编写一个 shell 脚本,从命令行为每个文件输出 长于从键盘读取的数字 k 的单词数。 输出必须按字数排序。
如何保留每个文件的字符数,以便对它们进行排序?
我尝试过类似的方法:
#!/bin/bash
if [ #@ -ne 1 ]
then exit 1
fi
array[$@]=''
echo -n "Give the number>"
read k
for f in $@;
do
n=`$f | wc -c`
if [ $n -gt $k ];
then
i++
array[i]=$n
fi
done
echo {array[@]} | sort -n
【问题讨论】:
-
从标准输入读取
k是一个可怕的界面。想象一下如果grep那样工作!将k设为第一个参数。 -
使用
$@本质上是不正确的;你应该总是使用"$@"。这会保留文件名中的空格。您还应该使用$(…)而不是反引号。如果do或then不在同一行,则不需要在for或if语句末尾使用分号。 -
请您澄清您是否想要单词数(任意长度)大于阈值
k(以及文件中的单词数)的文件列表,或者是否需要每个文件中单词长度超过阈值k的单词数的文件列表。在当前的 3 个答案中,2 个解决了第一个问题,1 个解决了第二个问题。