首页 > 解决方案 > grep 所有至少包含 X 个单词的行

问题描述

我有一个名为 a.sh 的脚本,它产生一个输出 - 一些文本行。

我有另一个名为 b.sh 的脚本,我想获取 a.sh 的输出并将其保存在一个变量中。

甚至更好地立即对其进行管道传输并删除所有太短的行 - 这意味着所有单词数量少于 X 的行。每个单词由一个空格(或多个空格)分隔

我怎样才能做到这一点?

标签: bash

解决方案


我会将脚本 awk 用管道传输并让它计算单词:awk '{ if (NF>4) { print }}'
Awk 的默认字段分隔符将行分隔为单词。这意味着if字段数 ( NF) 多于 ( >) 4awk 将print成为该行。

它可以缩短为,awk 'NF>4'因为 awk 的默认操作是打印。

另一种方法是使用wc(因为它实际上代表字数)。您可以像这样在 b 脚本中使用它:

while read line; do
  if [[ $(wc -w <<< "$line") -gt 4 ]]
    then
    echo $line
  fi
done

推荐阅读