使用cshell从单个for循环中的目录中获取两个文件

时间:2018-01-11 14:45:54

标签: csh

我在一个目录中有两种类型的文件。

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'

我希望有人可以提供帮助。

1 个答案:

答案 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)。