从unix中的文件中逐行读取

时间:2012-07-03 07:24:55

标签: shell unix

我是Unix的新手我有一个包含文件名列表的文件。我试图复制同一目录中的每个文件,但具有不同的扩展名。它不起作用。任何人都可以告诉我为什么我的代码是吼叫csl_nl.sts是其他文件名称的文件?

#!/bin/csh
set files = ("csl_nl.sts")
foreach file ('cat files')

  echo "Copying" $file "to" $file.cdc
  cp $file $file.cdc

end
exit 0

5 个答案:

答案 0 :(得分:2)

  1. Get Real Shell用于编写脚本。
  2. 在阅读行和文件操作上阅读The Bible
  3. 一个例子

    #!/bin/sh
    while IFS= read -r file; do
        printf 'Moving %s to %s\n' "$file" "${file}.cdc"
        ${file:+'false'} || cp -- "$file" "${file}.cdc"
    done
    

答案 1 :(得分:2)

这对我有用

#!/bin/csh

foreach file (`cat csl_nl.sts`)
    set a=`echo $file | awk -F"." '{print $1}'`
    echo "$a"
end

答案 2 :(得分:0)

#!/bin/ksh

OLD_EXTN=old
NEW_EXTN=new

cat csl_nl.sts | while read line;
do
  if [ ! -f $line];
  then
    echo $line does not exist ;
  else
    newfn=$(dirname $line)/$(basename $line .$OLD_EXTN).$NEW_EXTN
    echo Copy from $line to $newfn
    cp $line $newfn;
  fi
done

答案 3 :(得分:-1)

不能说我熟悉(t)csh,但是,这是强制性的bash示例:

#!/bin/bash

for file in `cat csl_ns.tst`; do
echo $file  " -> "  $file.cdc
cp $file $file.cdc
done

取决于输入文件的格式,但如果它们被空格或行分隔,则应该有效。

答案 4 :(得分:-1)

看看这是否有帮助:

#!/bin/csh
  set files = ("abc")
  foreach file (`cat $files`)
    set ext = ("cdc")
    set file2 = "$file.$ext"
    echo "Copying" $file "to" $file2;
    cp $file $file2;

  end
exit 0