(作为一个例子),我有10个文件,这样命名; file_name1.txt,file_name2.txt,file_name3.txt等。
每个文件中都有1-10行。
我想要一个只打印具有一定行数的文件的命令。即我想说打印文件名,如果该文件有1行,然后打印文件名2行等。
所以我知道要计算文件中的行数wc -l filename
,下一部分是什么,说if wc -l filename == 1, print filename
?
答案 0 :(得分:3)
我会用
wc -l * | awk '$1 == 10 {print $2}'
awk
调用只打印第1列包含值10的每一行的第2列。
答案 1 :(得分:0)
export wanted_lines=10
for i in file*; do [[ `wc -l $i | nawk '{print $1}'` == $wanted_lines ]] && cat $i; done
<强>更新强>
export wanted_lines=10
将want_lines声明为变量,初始化为10,并标记为自动导出到后续执行的命令的环境
for i in file*; do
这使用文件globbbing来构造当前目录中每个文件的列表,其名称以&#34; file&#34;开头。 每次迭代i变量都将引用列表中的下一个值
[[ expression ]]
方括号 - 评估表达式并返回0或1
`command`
反引号 - 执行命令并替换为命令
的输出wc -l $i
计算变量i的行,在本例中为文件名
| nawk '{print $1}'
上一个命令的stdout被送到nawk的stdin,打印第一列,在这种情况下是一个文件名
== $wanted_lines
等式测试,将分别返回true或false(0或1)
&& expression
当且仅当前一个表达式返回true时,控制运算符才会运行表达式
英文:对于以名称&#34;文件&#34;开头的每个文件,计算行数。当且仅当行数等于变量$ wanted_lines时,打印文件。