我在一个目录中有两种类型的文件。
AB011.X AB012.X AB013.X
和
AB011.Y AB012.Y AB013.Y
如果他们的基本名称匹配,我想一次从每个组中选择一个 我正在使用此代码:
for i in *.X
do
a=${i%.*}
for j in *.Y
do
b=${j%.*}
if ["$b" == "$a"] then
echo "$a, $b"
endif
done
done
此代码给出了以下错误:
line 10: syntax error near unexpected token `done'
line 10: `done'
我希望有人可以提供帮助。
答案 0 :(得分:1)
对于bash(即sh somecode.sh),工作 - 基于示例代码
3个更改 - endif变为fi,add;在]之后,并在大括号内添加空格......
for i in *.X
do
a=${i%.*}
for j in *.Y
do
b=${j%.*}
if [ "$b" == "$a" ]; then
echo "same $a, $b"
fi
done
done
对于cshell:
如果使用csh,那么希望这段csh脚本能让你走上正轨:它会打印出任何给定X版本是否存在Y版本的文件。
我正在使用csh
#> csh --version
tcsh 6.18.01 (Astron) 2012-02-14 (x86_64-unknown-linux) options
wide,nls,dl,al,kan,sm,rh,color,filec
在Centos 7上。
我就这样创建了文件:
#> touch AB011.X AB011.Y AB012.X AB012.Y AB013.X AB013.Y
并使用csh:
从名为test.csh的文件中运行以下脚本#> csh test.csh
' test.csh'的内容:
foreach v ( *.X )
echo "$v"
set a = "$v:r.Y"
if ( -f $a ) then
echo $a exist
else
echo $a does not exist
endif
end
输出是:
AB011.X
AB011.Y exist
AB012.X
AB012.Y exist
AB013.X
AB013.Y exist
(我已经回答了这个问题,但是它有点太过分了。所以我编辑成了csh)。