繁体   English   中英

脚本 Linux Bash,打印 grep Z78E6221F6393D1356681DB398F14C 基于 D 行中的字数

[英]Script Linux Bash, print grep output based on number of words in line

我正在尝试为 bash shell 编写脚本。 我得到了4个参数:

  1. 目录的路径
  2. 文件的扩展名
  3. 一个字
  4. 一个号码

我必须查找路径的子目录的所有文件和文件,以查找具有给定扩展名的文件。 然后,在文件中查找与给定单词匹配的行,但前提是该行中的单词数大于或等于提供的数字。
例如:
如果localDirectory有: image.png script.sh text.txt
text.txt有:

This is a text file
It contains many words
This is an example for a simple text file

然后给出命令: ./example.sh localDirectory txt text 7
我应该 output: This is an example for a simple text file

目前,我的脚本如下所示:

if [ "$#" -ne 4 ];
then
  echo "Not enough parameters"
  exit 1
fi
find $1 -name "*.$2" -exec grep -wi $3  {} \;

对于前 3 个目标,它工作得很好,我只是不知道现在如何过滤结果,使得该行的单词数大于或等于 $4。

我当然可以在那里创建一个新文件和 output ,然后从中读取并仅打印相关行,但我宁愿这样做而不创建新文件。

我对 shell 脚本非常陌生。

有任何想法吗?

使用awk以便您可以测试NF (行中的字段数)。

还要记住引用所有变量。

find "$1" -name "*.$2" -exec awk -v word="${3,,}" -v count="$4" 'NF >= count && tolower($0) ~ word' {} +

${3,,}$3转换为小写, tolower($0)将文件行转换为小写,因此比较它们使其不区分大小写。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM