Text-Processing

bash如何根據另一個文件將多個空行插入一個文件

  • April 21, 2022

在使用 bash 根據索引文件(稱為 file2)將多個空行插入文件(稱為 file1)時,我遇到了一些困難。(這些文件可以被視為傳遞的變數)索引文件(file2)看起來像:

-
-
-
M
H
A
-
N
X
X
M
-
-
-
F
G
A
...

file1 看起來像這樣:

M   x1 y1 z1 m1 n1
H   x2 y2 z2 m2 n2
A   x3 y3 z3 m3 n3
N   x4 y4 z4 m4 n4
X   x5 y5 z5 m5 n5
X   x6 y6 z6 m6 n6
M   x7 y7 z7 m7 n7
F   x8 y8 z8 m8 n8
G   x9 y9 z9 m9 n9
A   x0 y0 z0 m0 n0
...

輸出應如下所示:

-
-
-
M   x1 y1 z1 m1 n1
H   x2 y2 z2 m2 n2
A   x3 y3 z3 m3 n3
-
N   x4 y4 z4 m4 n4
X   x5 y5 z5 m5 n5
X   x6 y6 z6 m6 n6
M   x7 y7 z7 m7 n7
-
-
-
F   x8 y8 z8 m8 n8
G   x9 y9 z9 m9 n9
A   x0 y0 z0 m0 n0
...

如果 file2 刪除了“-”,則內容和順序將始終與 file1 中的第一列相同。

我嘗試在 Python 中使用 dataframe 來處理它,但它太慢了。所以我想知道如何使用 bash 來解決這個問題。謝謝!

假設索引文件中的字母總是以正確的順序排列(所以我們可以忽略我們看到的字母),並且空行實際上包含破折號並且不是完全空的,也許這應該有效:

$ awk -v datafile=data.txt '$1 == "-" { print "-"; next} { getline < datafile; print }' < index.txt 
-
-
-
M   x1 y1 z1 m1 n1
H   x2 y2 z2 m2 n2
A   x3 y3 z3 m3 n3
-
N   x4 y4 z4 m4 n4
X   x5 y5 z5 m5 n5
X   x6 y6 z6 m6 n6
M   x7 y7 z7 m7 n7
-
-
-
F   x8 y8 z8 m8 n8
G   x9 y9 z9 m9 n9
A   x0 y0 z0 m0 n0
...

它一次讀取一行索引文件;如果第一個欄位恰好是-,則列印該欄位;否則從另一個文件中讀取並列印一行。(這意味著如果索引文件中出現一個完全空的行,它也會從數據文件轉到下一行。)

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