For loop 在UNIX中使用for循环中的变量查找文件名

For loop 在UNIX中使用for循环中的变量查找文件名,for-loop,awk,find,sh,filenames,For Loop,Awk,Find,Sh,Filenames,我有一些这种形式的文件:2014.144.09.27.56.0195.IU.SDV.00.BHZ.M.SAC,我想提取SDV,00,BHZ变量,以便找到这种形式的文件/POLEZEROFILES/SAC_PZs_IU SDV__BHZ_2014.112.19.50.00.00002599.365.23.59.999,使用这些变量。我使用这个forloop,对于每个“.SAC”文件,它都会找到相应的“SAC_PZs_”文件,文件名中有相同的变量 #!/bin/sh ALIST=(*SAC) fo

我有一些这种形式的文件:2014.144.09.27.56.0195.IU.SDV.00.BHZ.M.SAC,我想提取SDV00BHZ变量,以便找到这种形式的文件/POLEZEROFILES/SAC_PZs_IU SDV__BHZ_2014.112.19.50.00.00002599.365.23.59.999,使用这些变量。我使用这个forloop,对于每个“.SAC”文件,它都会找到相应的“SAC_PZs_”文件,文件名中有相同的变量

#!/bin/sh
ALIST=(*SAC)

for ((i=0;i<${#ALIST[@]};i++));do

A="${ALIST[i]}"

staname=`ls "$A" | awk -F"[_.]" '{print $8}'`
staXX=`ls "$A" | awk -F"[_.]" '{print $9}'`
stacomp=`ls "$A" | awk -F"[_.]" '{print $10}'`

B=`find ./POLEZEROFILES -name "SAC*_${staname}_*${stacomp}_*${staXX}*" -print`
echo "${A}" "${B}"
done
它输出2
$B

/POLEZEROFILES/SAC_PZs_IU_RSSD_BHZ_10_2011.209.05.56.00.0000_2599.365.23.59.9999

/POLEZEROFILES/SAC_PZs_IU_RSSD_BHZ_00_2011.208.18.13.59.0000_2599.365.23.59.9999

第二个输出是正确的。
有人能解决这个问题吗?

与您的问题无关,只是一般性的评论。在那些awk行中不需要
ls
echo
将很好地工作(正如will
awk…新手说:“感谢您的所有更正!工作很好!”!
2014.144.09.27.33.0195.IU.RSSD.00.BHZ.M.SAC