我有一堆文件,例如:
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等于20197695
或20261798
。
在命令行中,这可以:
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
所以看起来像在脚本里面,大括号扩展没有像我预期的那样工作......我该怎么做才能解决这个问题?
答案 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 )