Unix - 提取具有一定数量行的文件

时间:2016-04-20 13:53:10

标签: linux unix count wc

(作为一个例子),我有10个文件,这样命名; file_name1.txt,file_name2.txt,file_name3.txt等。

每个文件中都有1-10行。

我想要一个只打印具有一定行数的文件的命令。即我想说打印文件名,如果该文件有1行,然后打印文件名2行等。

所以我知道要计算文件中的行数wc -l filename,下一部分是什么,说if wc -l filename == 1, print filename

2 个答案:

答案 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时,打印文件。