存储Grep In Array的输出

时间:2016-08-02 15:10:18

标签: bash for-loop grep

我在两个目录中有netCDF文件,我想最终找到一个变量并进行比较,如果不相等,我想删除这两个文件。到目前为止我所拥有的:

dir1=(/working/test/temp1/*.nc)
dir2=(/working/test/temp2/*.nc)

这里我试图将grep的输出存储到数组中。我在网站上找到了这些方法,但都没有工作。

for ((i = 0; i < ${#dir1[@]}; ++i)); do
  dir1_arr=($(ncdump -h "$dir1" | grep "Temperature = "))
done

for i in $dir1; do
dir1_arr=($(ncdump -h "$i" | grep "Granules = "))
done

我不确定这是否是正确的方法,但我想比较应该存储在两个单独数组中的颗粒值,如果颗粒不匹配则删除相应的文件。首先,我需要通过将grep的输出存储在数组中的步骤。

1 个答案:

答案 0 :(得分:1)

所有提交的尝试都没有引用$(…),这是必不可少的,因为grep输出包含多个单词。请参阅本答案的结尾以获得解决方案。此外,还有其他错误:

for ((i = 0; i < ${#dir1[@]}; ++i)); do
  dir1_arr=($(ncdump -h "$dir1" | grep "Temperature = "))
done

这不起作用,因为在循环体

  • 您使用$dir1代替${dir1[i]}
  • 您使用dir1_arr=代替dir1_arr+=
for i in $dir1; do
dir1_arr=($(ncdump -h "$i" | grep "Granules = "))
done

这不起作用,因为

    您在for命令头中使用$dir1代替"${dir1[@]}"
  • 您使用dir1_arr=代替dir1_arr+=
  • 的循环体中的
dir1_arr=(); for d in /working/test/temp1/*.nc; do dir1_arr+=($(ncdump -h "$d" | grep "Temperature = ")); done

由于错误的绝对路径/…,这不起作用。

正确的版本是

dir1_arr=()
for d in working/test/temp1/*.nc
do  dir1_arr+=("$(ncdump -h $d | grep 'Granules =')")
done