如何使用for循环将tmp文件中的数据一一写入到最终输出文件?

如何使用for循环将tmp文件中的数据一一写入到最终输出文件?

我有两个名为 tmp 文件tmp1tmp2其中包含一些行。
tmp1 文件,

1c\  
datafile no. 23  
2c\  
datafile is ok

tmp2 文件,

3c\  
datafile no. 24  
4c\  
datafile is ok

我有一个文件(名为wrong_file),我想从 tmp 文件中更正其中的条目

datafile no. 32  
datafile is ok  
datafile no. 42  
datafile is ok

我的输出文件(modified_file)将是这样的,

datafile no. 23  
datafile is ok  
datafile no. 24  
datafile is ok    

我想使用 for 循环,它将运行到最后一个 tmp 文件并将数据从 tmp 文件写入最终文件(输出),而不是手动执行。

我努力了,

sed -f tmp1 wrong_file > file1  
sed -f tmp2 file1 > modified_file

答案1

我很确定你可以这样做:

cat ./tmp[12] | sed -f - ./wrong_file >outfile

sed至少,如果所有脚本指令都特定于行号,则不会导致任何问题。无需单独应用脚本 - 您可以将它们全部链接在一起并立即运行脚本。

然而,你必须这样做,这表明重复工作。这里是脚本的副本sed,它可以避免首先写入任何临时文件,而只需扫描输入以查找需要更改的行,然后将流中的所有脚本sed一次性传递到最终脚本:

{   sed '/^#\.tid\.setnr/!d;=;g;G' |
    paste  -d'c\\\n' - - - ./addfile
}   <./mainfile | sed -f - ./mainfile

它的输出与您此处的示例数据不同,因为它是根据您在其他问题。但它完全避免编写修改脚本,并将所有编辑命令发送到sed可以立即采取行动的进程。

一般来说,您可以认为一个sed进程已经准备好处理其脚本输入,就像它也准备好处理其编辑内容输入一样。-

相关内容