bash - 防止在 bash 中创建空文件

标签 bash grep

我编写了以下代码,其中:

  • $1 = 输入 .csv 文件
  • $2 = 要在 $1 中搜索的字符串列表
  • $3 = 要在 $2 中搜索的不同字符串列表
while read str1
do
    while read str2
    do
     grep $str1 $1 | grep $str2 | cut -d "," -f 6 > ${str1}_${str2}.txt
    done < $3
done < $2

它基本上完成了我想要它做的事情(从单独的输入文件中搜索两个不同的字符串,提取包含这两个字符串的行的字段 6 并将字段 6 的内容写入结果文件)。 然而,当然,结果文件是为 $2 和 $3 中所有可能的字符串组合创建的,即使它们是空的。有没有办法防止创建空文件,或者我必须在最后删除它们?

最佳答案

您可以使用 $(...) 捕获程序输出:

res=$(grep "$str1" "$1" | grep "$str2" | cut -d "," -f 6)

并使用 -n 测试,如果字符串为空:

if [[ -n $res ]]; then echo "$res" > "${str1}_${str2}.txt" ; fi

关于bash - 防止在 bash 中创建空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48611229/

相关文章:

python - 如何将参数从 python 代码传递到 bash 脚本?

java - 使用 Java 运行 Bash 脚本

linux - 如果 sed 和 grep 操作为真,则打印部分行

linux - 在 drupal 语言中 : grep and pipe - list all the findings to avoid overhead & serverperformance issues

linux - 如何获取上个月创建的所有文件的行数?

macos - Mac 上的默认终端 $PATH 位于何处?

bash - 如何在基于 echo 的输出中填充一定宽度的空间

sed - 从文件中删除前导空格

linux - linux下如何查找字符串

windows - 从 Windows 上的 bash 脚本运行 Openssl - 主题不以 '/' 开头