【问题标题】:Find files where the first line is one word or less查找第一行是一个单词或更少的文件
【发布时间】:2020-05-12 02:08:08
【问题描述】:

我在 Mac Os 10.14.6 上并且有一个包含多个文件的目录。我想打印出第一行是一个单词或更少的文件列表。

我该怎么做?


我尝试过的步骤: awk 有一个可以用来统计单词的函数:

awk '/^.+\|\w+ \|/'

这将用于查找包含一个单词的所有行。 但是,我不确定如何将其限制在每个文件的第一行。

【问题讨论】:

  • 只有 GNU awk 将 \w 识别为 POSIX [[:alnum:]_] 的简写。不过,这真的是您所说的 word 的意思,还是您的意思是任何非空格字符的连续序列(与您接受的答案相匹配)或其他什么?
  • 顺便说一句,您发布的脚本肯定不会“查找包含一个单词的所有行”,而是会查找包含任何一个或多个字符后跟| 字符后跟的行(在 gawk 中)一个或多个字母数字或下划线字符(或非 gawk 中的 w 字符)后跟一个空白字符,然后是第二个 |,后跟零个或多个字符。

标签: bash shell awk command-line terminal


【解决方案1】:

您能否尝试以下操作,我正在使用 GNU awknextfile 选项,这将帮助我们节省周期/时间,因为一旦我们检查了 Input_file 的第一行,我们就不需要读取完整的 Input_file。

find '/your_path/' -type f -exec awk 'FNR==1{if(NF<=1){print FILENAME};nextfile}' {} \+

这里需要注意的是awk的字段分隔符在这里用作空格(默认为awk)。



或者,如果您的 awk 中没有 nextfile 选项,请尝试以下操作,我在阅读第一行后退出,这将节省我们的周期,并且在检查第一行后不会读取整个文件。

find '/your_path/'-type f -exec awk 'FNR==1{if(NF<=1){print FILENAME};exit}' {} \;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 2019-08-13
    • 1970-01-01
    • 2021-09-05
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多