如何在 shell 中使用 while 循环读取一个文件并重定向到另一个文件

如何在 shell 中使用 while 循环读取一个文件并重定向到另一个文件

我有一个名为的文件unimplemented.txt,其名称如下:

verify-sdh-t1-satop-traffic-over-mpls-1for1-xxx,./TDM/SDH.xls
verify-sdh-t1-satop-traffic-over-mpls-1plus1-xxx,./TDM/SDH.xls

如何使用 while 循环读取上面的文件并生成一个输出文件,其中/TDM/SDH_check.xls包含

verify-sdh-t1-satop-traffic-over-mpls-1for1-xxx

我尝试这样做,但它进入无限循环

while IFS="," read dummy casename tpname < "unimplemented.txt"
do
    echo "$casename" > basename $tpname|sed -e 's/\..\+$//'
done

答案1

看来您的脚本中有几个问题:

  1. 你为什么read dummy casename tpname?在这一行中,read 正在等待 3 个字段,但您只需要 2 个字段。

  2. 当你写 时echo "$casename" > basename $tpname|sed -e 's/\..\+$//',它会:

    1. 回声$casenamebasename(而不是$basename)。
    2. sed替换应用于 echo... 的输出,这没什么。
  3. 您使用>它将在每次调用时覆盖echo。要附加,请使用>>.

下面对我来说看起来是正确的,但不确定这是否是您想要的:

gcolangelo@NEO-L196:/tmp/pouet$ cat unimplemented.txt 
verify-sdh-t1-satop-traffic-over-mpls-1for1-xxx,./TDM/SDH.xls
verify-sdh-t1-satop-traffic-over-mpls-1plus1-xxx,./TDM/SDH.xls
verify-sdh-t2-satop-traffic-over-mpls-1for1-xxx,./TDM/SDG.xls
verify-sdh-t2-satop-traffic-over-mpls-1plus1-xxx,./TDM/SDG.xls
gcolangelo@NEO-L196:/tmp/pouet$ cat unimplemented.txt | while IFS=',' read casename tpname ; do echo "$casename"|sed -e 's/\..\+$//' >> $tpname ; done
gcolangelo@NEO-L196:/tmp/pouet$ cat TDM/SDH.xls 
verify-sdh-t1-satop-traffic-over-mpls-1for1-xxx
verify-sdh-t1-satop-traffic-over-mpls-1plus1-xxx
gcolangelo@NEO-L196:/tmp/pouet$ cat TDM/SDG.xls 
verify-sdh-t2-satop-traffic-over-mpls-1for1-xxx
verify-sdh-t2-satop-traffic-over-mpls-1plus1-xxx

相关内容