我想在55個「顯示」行之後分割一個文本文件(1000-2000行)。要計算顯示的行的實際數目,Bash:在正則表達式匹配之前分割文本文件
grep -n "^L 7p 39 C\|^N 2" airportdata.txt | cut -f1 -d: >> matches_all.txt
作品所需。
現在我有顯示的行的總數,包括「顯示的內容」所在的行號。
我的問題:我只允許在N 2
之前拆分文件(請參閱示例內容)以保留文件結構。我不知道如何實現這一點。我的嘗試是看比賽號碼是否是N 2
。然後拆分很容易:
head -55 airportdata.txt > apd_1.txt
tail -n +55 airportdata.txt > apd_2.txt
在保持文件結構完好無損的情況下做到了這一點。
如果我匹配其他行之一,我必須在文件中「走」,並找到一個行數較低的行,其行數爲N 2
,並在那裏分割文件。而這正是我迄今爲止沒有成功的部分。
任何想法非常受歡迎。
一切順利,
克里斯
文件結構: N n
定義列數。以下行分配到這些列中,直到新的N n
發生變化。
N 2
表示兩列,所以接下來的兩行構成一個「顯示行」。
N 9
表示九列,每九行後面組成一個「顯示行」。
樣本內容airportdata.txt
的:
N 2
L 7p 40 L @:6.5p:[email protected]::
L 7p 39 R 1410ft/nil
N 9
L 7p 39 L 1
L 7p 39 L 16
L 7p 39 L \040
L 7p 39 L \040
L 7p 39 C 2500*x61
L 7p 39 R \040
L 7p 39 R \040
L 7p 39 R 34
L 7p 39 R -
N 2
L 7p 40 L @:6.5p:[email protected]::
L 7p 39 R 1890ft/nil
N 9
L 7p 39 L 1
L 7p 39 L 11L
L 7p 39 L \040
L 7p 39 L \040
L 7p 39 C 2500 x46
L 7p 39 R \040
L 7p 39 R \040
L 7p 39 R 29R
L 7p 39 R 1
L 7p 39 L G
L 7p 39 L 11R
L 7p 39 L \040
L 7p 39 L \040
L 7p 39 C 2200 x46
L 7p 39 R \040
L 7p 39 R \040
L 7p 39 R 29L
L 7p 39 R G
N 2
L 7p 40 L @:6.5p:[email protected]::
L 7p 39 R 10ft/n.a
N 9
L 7p 39 L 3
L 7p 39 L 08L
L 7p 39 L \040
L 7p 39 L \040
L 7p 39 C 3000 x61
L 7p 39 R \040
L 7p 39 R \040
L 7p 39 R 26R
L 7p 39 R 3
L 7p 39 L 3
L 7p 39 L 08R
L 7p 39 L \040
L 7p 39 L \040
L 7p 39 C 3500*x61
L 7p 39 R \040
L 7p 39 R \040
L 7p 39 R 26L
L 7p 39 R 1
L 7p 39 L 1
L 7p 39 L 12
L 7p 39 L \040
L 7p 39 L \040
L 7p 39 C 2200 x61
L 7p 39 R \040
L 7p 39 R \040
L 7p 39 R 30
L 7p 39 R G
N 2
L 7p 40 L @:6.5p:[email protected]::
L 7p 39 R 780ft/8
N 9
L 7p 39 L 2
L 7p 39 L 36
L 7p 39 L \040
L 7p 39 L \040
L 7p 39 C 3300 x61
L 7p 39 R \040
L 7p 39 R \040
L 7p 39 R 18
L 7p 39 R V
L 7p 39 L 1
L 7p 39 L 13
L 7p 39 L \040
L 7p 39 L \040
L 7p 39 C 2600 x61
L 7p 39 R \040
L 7p 39 R \040
L 7p 39 R 31
L 7p 39 R 1
適應於所述樣品的內容的可能的結果將是:4中顯示的行
apd_1.txt
後分裂:
N 2
L 7p 40 L @:6.5p:[email protected]::
L 7p 39 R 1410ft/nil
N 9
L 7p 39 L 1
L 7p 39 L 16
L 7p 39 L \040
L 7p 39 L \040
L 7p 39 C 2500*x61
L 7p 39 R \040
L 7p 39 R \040
L 7p 39 R 34
L 7p 39 R -
條件
apd_2.txt
:
N 2
L 7p 40 L @:6.5p:[email protected]::
L 7p 39 R 1890ft/nil
N 9
L 7p 39 L 1
L 7p 39 L 11L
L 7p 39 L \040
L 7p 39 L \040
L 7p 39 C 2500 x46
L 7p 39 R \040
L 7p 39 R \040
L 7p 39 R 29R
L 7p 39 R 1
L 7p 39 L G
L 7p 39 L 11R
L 7p 39 L \040
L 7p 39 L \040
L 7p 39 C 2200 x46
L 7p 39 R \040
L 7p 39 R \040
L 7p 39 R 29L
L 7p 39 R G
[and all the rest]
第五匹配的行不N 2
,因此切在以前N 2
想幫助,但我不認爲我完全理解這個問題。就像一個提示:Csplit可能在這裏有所幫助:http://man7.org/linux/man-pages/man1/csplit.1.html –
如果你重寫你的問題爲5行,而不是56行,它將是方便人們可視化你要求的結果。祝你好運。 – shellter
你是不是固定在bash上?在perl或ruby中你可以更容易做一些展望。 –