在最后一行之前追加文件第n行

时间:2016-12-16 13:28:04

标签: bash

我搜索了一段时间,但我最接近发现的是追加到最后一行。

我发现的一个例子是追加到最后一行

sed '$ e cat word.txt' test.txt

我最接近的是使用x命令和sed来到倒数第二行。

sed 'x;$ e cat word.txt' test.txt

但是,我想知道如何从最后一行的第3行,第4行等附加。

例如

WORD.TXT

lorem ipsum...

的test.txt

1
2
3
4
5
6
7

word.txt追加到test.txt

的第4行到最后一行
1
2
3
4
lorem ipsum...
5
6
7

我找到的唯一例子是从行的开头追加第n个,但不追溯到最后一行的第n个。

4 个答案:

答案 0 :(得分:2)

使用headtail

{
    head -n-3 text.txt
    cat word.txt
    tail -n3 text.txt
} > newfile.txt

答案 1 :(得分:1)

在GNU awk(ARGIND变量)中:

$ awk -v nth=4 '
    ARGIND==1 { s=s (s==""?"":ORS) $0; next } 
    ARGIND==2 { nr=NR; next } 
    ARGIND==3 && FNR==(nr-nth) { print s } 
    1' word test test
1
2
3
lorem ipsum...
4
5
6
7

它读取test两次,第一次计算记录数。

答案 2 :(得分:0)

使用awk,您不需要在处理之前撤消文件:

awk -v last=3 -v toadd="$(<word.txt)" '
     NR > last { print a[(NR-1) % last] }
     { a[(NR-1) % last] = $0 }
     END{ 
         print toadd
         for(i=NR-last; i<NR; i++)
             print a[i % last]
     }' file

答案 3 :(得分:0)

使用awk,您可以保存所有行,然后将其打印在END块中

{ lines[NR] = $0 }
END{ for (i = 1; i <= NR; i++) {
    if (NR-n + 1 == i)
        print word;
    print lines[i]
    }
}

示例

$ awk -vn=3 -vword="$(cat word)" -f prog.awk file
1
2
3
4
lorem ipsum..
5
6
7