Bash脚本 - 对包含特定数字的文件名执行grep

时间:2018-04-08 03:19:29

标签: bash grep command-substitution brace-expansion

我有一堆文件,例如:

jobReports/NARX_20191212_1.out
jobReports/NARX_20191212_10.out
jobReports/NARX_20197695_2.out
jobReports/NARX_20197695_3.out
jobReports/NARX_20261798_1.out

其中第一个数字序列表示jobID,第二个数字序列表示arrayID。

我想对该目录中所有.out个文件执行搜索,其jobID等于2019769520261798

在命令行中,这可以:

grep "Saving results to" jobReports/NARX_{20197695,20261798}*.out | wc -l

,它给出了所需文件中该字符串出现次数的计数。在我的脚本中,我有以下内容:

#!/bin/bash
myJobs = ( 20197695, 20261798 )
IFS=, eval 'myJobs_string="${myJobs[*]}"'
echo $(grep "Saving results to" jobReports/NARX_{$myJobs_string}*.out |wc -l)

运行时,我收到错误:

grep: jobReports/NARX_{: No such file or directory
grep: 20197695: No such file or directory
grep: }*.out: No such file or directory

所以看起来像在脚本里面,大括号扩展没有像我预期的那样工作......我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:-1)

#!/bin/bash

myJobs=( 20197695, 20261798 )
ifs_ini="$IFS"
IFS+=','
myJobs_string=( ${myJobs[*]} )
IFS="$ifs_ini"

echo myJobs ${myJobs[@]}
echo myJobs_string ${myJobs_string[@]}
echo jobReports/NARX_{${myJobs_string[@]}}*.out
grep -c 'Saving results to.*$' jobReports/NARX_{"$myJobs_string"}*.out
bash --version

输出

myJobs 20197695 20261798
myJobs_string 20197695 20261798
jobReports/NARX_{20197695 20261798}*.out
<not tested>

PS:grep -c ...echo $( echo grep ... | wc -l )

相同