StackExchange 新手,请原谅我的错误。
我有一个输入文件,需要在最后一个字符之前复制到另一个文件中。
输入文件.txt:
input {
"inputstuff"
}
filetowriteto.txt:
Stuff {
foo {
"foostuff"
}
bar {
"barstuff"
}
}
运行脚本后,生成的文件现在应该是:
filetowriteto.txt:
Stuff {
foo {
"foostuff"
}
bar {
"barstuff"
}
input {
"inputstuff"
}
}
基本上脚本复制了
input
一组行并将它们粘贴在 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) print last; last=$0; next}
在读取第一个文件时,(a) 如果我们不在第一行,则打印
last
的值, (b) 将当前行的文本赋值给 last
, 和 (c) 跳过其余的命令并跳转到 next
线。这使用了一个常见的 awk 技巧。条件
FNR==NR
仅在我们读取第一个文件时为真。这是因为,在 awk 中,NR 是我们到目前为止读取的行数,而 FNR 是我们从当前文件中读取的行数。因此,FNR==NR
仅当我们从第一个文件中读取时才为真。 print " " $0
在读取第二个文件时,用一些前导空格打印每一行。
END{print last}
打印完第二个文件后,打印第一个文件的最后一行。
关于shell - 将一个文件的内容复制到另一个文件中相对于文件末尾的一点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40033198/