我在两个目录中有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的输出存储在数组中的步骤。
答案 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