【发布时间】:2016-04-20 13:53:09
【问题描述】:
(例如),我有 10 个文件,这样命名;文件名1.txt、文件名2.txt、文件名3.txt等
每个文件有 1-10 行。
我想要一个只打印具有特定行数的文件的命令。即我想说如果该文件有 1 行则打印文件名,然后 用 2 行打印文件名 等等。
所以我知道要计算文件中的行数它是wc -l filename,下一部分是什么,说if wc -l filename == 1, print filename?
【问题讨论】:
(例如),我有 10 个文件,这样命名;文件名1.txt、文件名2.txt、文件名3.txt等
每个文件有 1-10 行。
我想要一个只打印具有特定行数的文件的命令。即我想说如果该文件有 1 行则打印文件名,然后 用 2 行打印文件名 等等。
所以我知道要计算文件中的行数它是wc -l filename,下一部分是什么,说if wc -l filename == 1, print filename?
【问题讨论】:
我会用
wc -l * | awk '$1 == 10 {print $2}'
awk 调用只打印第 1 列包含值 10 的每一行的第 2 列。
【讨论】:
export wanted_lines=10
for i in file*; do [[ `wc -l $i | nawk '{print $1}'` == $wanted_lines ]] && cat $i; done
更新
export wanted_lines=10
将wanted_lines声明为变量,初始化为10,并标记为自动导出到后续执行命令的环境
for i in file*; do
这使用文件通配符来构造当前目录中名称以“file”开头的每个文件的列表。 每次迭代 i 变量都会引用列表中的下一个值
[[ expression ]]
方括号 - 计算表达式并返回 0 或 1
`command`
反引号 - 执行命令并替换为命令的输出
wc -l $i
计算变量 i 的行数,在本例中为文件名
| nawk '{print $1}'
前一个命令的标准输出被输入到 nawk 的标准输入,打印第一列,在这种情况下是文件名
== $wanted_lines
等式测试,将分别返回真或假(0或1)
&& expression
当且仅当前一个表达式返回 true 时,控制运算符才会运行表达式
用英语:对于每个以名称“file”开头的文件,计算行数。当且仅当行数等于变量 $wanted_lines 时,打印文件。
【讨论】: