Bash 将Grep的输出存储在数组中
我有两个目录中的netCDF文件,我希望最终在其中找到一个变量并进行比较,如果不相等,我希望删除这两个文件。到目前为止,我所拥有的:Bash 将Grep的输出存储在数组中,bash,for-loop,grep,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" |
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
((i=0;i<${dir1[@]};++i));做
dir1_arr=($(ncdump-h“$dir1”| grep”Temperature=“))
完成
对于i,单位为1美元;做
dir1_arr=($(ncdump-h“$i”| grep”Granules=“))
完成
我不确定这是否是正确的方法,但我想比较应该存储在两个单独数组中的颗粒值,如果颗粒不匹配,则删除相应的文件。首先,我需要在数组中存储grep的输出 所有呈现的尝试都没有引用
$(…)
,这一点很重要,因为grep
输出包含多个单词。有关解决方案,请参见此答案的结尾。此外,还有其他错误:
这不起作用,因为
- 在
命令头中,您使用了for
而不是$dir1
“${dir1[@]}”
- 在循环体中,您使用了
而不是dir1\u arr=
dir1\u arr+=
这不起作用,因为绝对路径错误
/…
正确的版本是
dir1_arr=()
for d in working/test/temp1/*.nc
do dir1_arr+=("$(ncdump -h $d | grep 'Granules =')")
done
当我执行
echo${dir1[@]}
时,屏幕上不会打印任何内容。您的dir1
数组为空。您关心的目录是绝对路径还是相对路径?@EdMorton我希望数组包含该目录路径中的netCDF文件。它可能是相对路径。@anubhava yes回显确实显示所有文件是否echo“${dir1[@]}”
work?
for i in $dir1; do
dir1_arr=($(ncdump -h "$i" | grep "Granules = "))
done
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