【问题标题】:Unix - extract files with certain number of linesUnix - 提取具有一定行数的文件
【发布时间】: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

【问题讨论】:

    标签: linux unix count wc


    【解决方案1】:

    我会用

    wc -l * | awk '$1 == 10 {print $2}'
    

    awk 调用只打印第 1 列包含值 10 的每一行的第 2 列。

    【讨论】:

      【解决方案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 时,打印文件。

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关 why 和/或 如何 回答问题的额外上下文将显着改善其长期价值。请edit你的答案添加一些解释。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2019-01-19
      • 2010-09-10
      • 1970-01-01
      相关资源
      最近更新 更多