2016-12-16 77 views
0

我搜索了一段時間,但最接近的結果是追加到最後一行。在最後一行之前附加文件第n行

一個例子,我發現被追加到最後一行

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

我正在使用與sedx命令來獲取到倒數第二行最接近的一次。

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

最後一行
1 
2 
3 
4 
lorem ipsum... 
5 
6 
7 

我發現的唯一例子是從行的開頭追加第n個,而不是從最後一個行開始的第n個。

+2

請張貼一些測試數據和預期的輸出。 –

+0

@JamesBrown done – Tek

回答

2

使用headtail

{ 
    head -n-3 text.txt 
    cat word.txt 
    tail -n3 text.txt 
} > newfile.txt 
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 
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,計算第一次使用記錄計數。

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 
+0

輸出記錄順序是隨機的。如果你把'for'改成了'(i = 1; i <= nr; i ++)',它就會起作用。我不確定在'END'塊中定義了「NR」。 –

+1

@JamesBrown我不知道爲什麼它是隨機的。無論如何,我已經糾正它,以便我們沒有任何意外。 'NR'在'END'塊中可用。 – nu11p01n73R

相關問題