Awk

在 awk 中每 n 行從輸入文件中插入行

  • March 27, 2018

輸入文件 A 和 B 如下:

文件 A

1 1 1
2 2 2
3 3 3

文件 B

10 10 10
20 20 20
30 30 30
40 40 40
50 50 50
60 60 60 
70 70 70

我想每 3 行文件 B 插入一行文件 A,從第一行開始是文件 A 的第一行,以便輸出如下所示:

1 1 1
10 10 10
20 20 20
30 30 30
2 2 2
40 40 40
50 50 50
60 60 60 
3 3 3 
70 70 70

我最初的嘗試涉及為每三行創建單獨的文件,但我的數據集非常大,所以我對節省硬碟空間很感興趣。

如果您不需要使用 awk,粘貼可以工作:

$ paste -d '\n' <fileB fileA - - - | tr -s '\n' >fileC

tr部分不是絕對必要的,因此如果您不介意額外的換行符,可以將其刪除。

聽起來像是一個很好的案例getline

awk '(NR-1)%3 == 0 {getline line < "FileA"; print line} 1' FileB
1 1 1
10 10 10
20 20 20
30 30 30
2 2 2
40 40 40
50 50 50
60 60 60 
3 3 3
70 70 70

引用自:https://unix.stackexchange.com/questions/433714