我使用这个BASH脚本检查file.txt是否有1到10行:
if [[ `wc -l file.txt | awk '{ print $1 }'` -le "10" && `wc -l file.txt | awk '{ print $1}'` -ge "2" ]]
echo "It has between 1 and 10 lines."
fi这段代码太冗长了。如果我对一个部分进行了更改,很容易忘记对重复的部分进行更改。
有没有办法简化语法?
发布于 2014-09-26 07:18:37
一种选择是使用awk完成整个操作:
awk 'END{if(1<=NR&&NR<=10) print "It has between 1 and 10 lines."}' file.txt正如in the comments (感谢rici)所指出的,您可能希望阻止awk在读取10行代码后处理文件的其余部分:
awk 'NR>10{exit}END{if(1<=NR&&NR<=10) print "It has between 1 and 10 lines."}' file.txt如果调用exit,END块仍然会被处理,因此仍然需要在if中进行这两个检查。
或者,您可以将wc -l的结果存储到bash中的一个变量中:
lines=$(wc -l < file.txt)
(( 1 <= lines && lines <= 10)) && echo "It has between 1 and 10 lines."请注意,将文件重定向到wc意味着您只获得了数字,而没有文件名。
发布于 2014-09-26 07:33:14
获取行数,然后根据范围界限进行检查:
lc=$(wc -l < file.txt)
if (( 1 <= lc && lc <= 10 )); then
echo "It has between 1 and 10 lines"
fihttps://stackoverflow.com/questions/26049639
复制相似问题