【问题标题】:Append a file in the middle of another file in bash在 bash 中的另一个文件中间附加一个文件
【发布时间】:2018-03-07 12:10:25
【问题描述】:

我需要将一个文件附加到另一个文件的特定位置。 我得到了行号,所以我的文件是:

file1.txt:

I
am
Cookie

第二个是

file2.txt:

a
black
dog
named

所以,解决之后,file1.txt 应该是这样的

I
am
a
black
dog
named
Cookie

该解决方案应与两个文件中存在的字符(如"/)兼容。

任何工具都可以,只要它是本机的(我的意思是,无需安装新软件)。

【问题讨论】:

    标签: linux bash file merge append


    【解决方案1】:

    您能否尝试关注一下,如果这对您有帮助,请告诉我。

    awk 'FNR==3{system("cat file2.txt")} 1' file1.txt
    

    输出如下。

    I
    am
    a
    black
    dog
    named
    Cookie
    

    说明: 在读取名为 file1.txt 的 Input_file 时检查此处是否行号为 3,如果是,则使用 awk 的系统实用程序来帮助我们调用 shell 的命令,然后我正在打印 file2 .txt 使用 cat 命令。然后提到 1 将打印 file1.txt 中的所有行。因此,我们可以将 file2.txt 中的行连接到 file1.txt 中。

    【讨论】:

    • 这成功了!为了理解你的答案......翻译是:当你到达第 3 行 cat file2.txt 然后停止? system()..thnx 的有趣用法!
    • @WyattGillette,不客气。很高兴它对您有所帮助,我只是添加了相同的解释,如果您对此有任何其他疑问,请告诉我。
    【解决方案2】:

    除了 RavinderSingh13 建议使用 sed 之外的另一个选项: 要将file2.txt 的文本添加到file1.txt 的特定行之后:

    sed -i '2 r file2.txt' file1.txt
    

    输出:

    I
    am
    a
    black
    dog
    named
    Cookie
    

    在匹配模式后进一步添加文件:

    sed -i '/^YourPattern/ r file2.txt' file1.txt
    

    【讨论】:

    • 这个也有效,由于时间顺序,我给了第一个答案:) 顺便说一句,这意味着:在第 2 行编辑流,在 file1.txt 中插入 file2.txt?看起来更简单...
    • 表示在 file1 的第 2 行之后添加 file2 的行。它不像其他答案那样调用cat
    • 是的 'r' 很容易,我怎么能不去想它
    • 另外,假设接受的答案是最好的答案,而不是第一个anhway :)
    • 这应该是公认的答案,因为它允许在特定行号或模式之后添加文件的内容
    【解决方案3】:

    怎么样

    head -2 file1 && cat file2 && tail -1 file1
    

    你可以计算行数来决定file1中headtail参数使用

    wc -l file1
    

    【讨论】:

    • 创造力在这里工作并且正在发挥作用,一个好的解决方法是:如果文件很大(例如 5000+ 行)将是一个计算尾部参数的问题......很容易找到头一个(cat -n 和 grep)可以这样做:tac file2 > file3 && cat -n file3 | grep dog 查找尾部参数,艰难...有趣的方式和工作
    猜你喜欢
    • 2019-08-15
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多