StackExchange新手,请原谅我的错误.
我有一个输入文件,需要在最后一个字符之前复制到另一个文件中.
inputfile.txt:
input { "inputstuff" }
Stuff { foo { "foostuff" } bar { "barstuff" } }
Stuff { foo { "foostuff" } bar { "barstuff" } input { "inputstuff" } }
基本上,脚本复制输入的行集并将它们粘贴到filetowriteto.txt中最后一个右括号之前.
该脚本不能依赖行数,因为filetowriteto.txt没有可预测数量的foo或bar行,我不知道如何使用sed或awk来执行此操作.
解决方法
尝试:
$awk 'FNR==NR{ if (NR>1) print last; last=$0; next} {print " " $0} END{print last}' filetowriteto.txt inputfile.txt Stuff { foo { "foostuff" } bar { "barstuff" } input { "inputstuff" } }
要更改文件:
awk 'FNR==NR{ if (NR>1) print last; last=$0; next} {print " " $0} END{print last}' filetowriteto.txt inputfile.txt >tmp && mv tmp filetowriteto.txt
这个怎么运作
> FNR == NR {if(NR> 1)打印最后;最后= $0;下一个}
在读取第一个文件时,(a)如果我们不在第一行,则打印last的值,(b)将当前行的文本分配到last,(c)跳过其余命令并跳转到下一行.
这使用了常见的awk技巧.条件FNR == NR仅在我们读取第一个文件时才为真.这是因为,在awk中,NR是我们到目前为止读取的行数,而FNR是我们到目前为止从当前文件读取的行数.因此,FNR == NR仅在我们从第一个文件读取时才为真.
>打印“”$0
在读取第二个文件时,使用一些前导空格打印每一行.
> END {print last}