gpt4 book ai didi

shell - 将一个文件的内容复制到另一个文件中相对于文件末尾的一点

转载 作者:行者123 更新时间:2023-12-05 00:54:25 24 4
gpt4 key购买 nike

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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com