我遇到一个有趣的问题来计算文件中的单词,其中行数也被指定为命令行参数。例如,如果输入文本文件有 -
Unix is an OS
Linux is the child of Unix
Unix is fun.
End of File
要执行的命令是:
bash test.sh unix.txt 3
其中unix.txt
是包含句子的测试文件,3 是要统计单词的行数。答案是 13。
我已经使用了基本wc
命令,但没有一个给出正确的答案。
因此,我尝试使用 for 循环,但无法指定如何仅获取这些行数。
答案1
获得head -n 3 unix.txt
文件的前三行,然后可以将它们通过管道传输到wc
因此,对于存储在 shell 变量中的任意文件名$file
:
{ head -n 3 | wc -w; } < "$file"
或者:
head -n 3 -- "$file" | wc -w
尽管后者不适用于-
通过某些head
实现调用的文件,并且当文件无法打开时0
除了错误消息(通过)之外还输出,并且在这种情况下失败退出状态将丢失,除非您使用在某些 shell 中找到的head
(非标准)选项。pipefail
答案2
也试试
awk -v"LNR=$2" 'NR > LNR {print SUM; exit} {SUM+=NF}' file
13
答案3
我们可以这样做awk
awk '{print NF}' unix.txt
字数和行数
awk '{print NF" "$0}' unix.txt
带行号的字数统计
awk '$0="line"NR": "NF' unix.txt
awk '$0="line"NR": "NF' unix.txt | grep line3
答案4
你的脚本有两个参数,
因此,在脚本中,您可以像下面这样使用它:
sed -n "/\w/{1,$2 p;}" $1 | wc -w
其中$1
包含您的文件名
$2
包含您需要搜索的总行数