我試圖在 n 個空行之后拆分一個大文本檔案。文本檔案只包含一個空行作為資料分隔符。如下所示:
Lorem ipsum
Lorem ipsum
Lorem ipsum
Lorem ipsum
Lorem ipsum
Lorem ipsum
Lorem ipsum
Lorem ipsum
Lorem
Lorem
...
我曾嘗試使用 csplit
csplit data.txt /^$/ {3}
我的期望是在 3 個空行之后(不是連續的,而是在游標處理 3 個空行之后)它拆分檔案并繼續這樣做。但它實際上在每個空行中拆分檔案。
我預期的檔案:xx00
Lorem ipsum
Lorem ipsum
Lorem ipsum
Lorem ipsum
Lorem ipsum
Lorem ipsum
xx01
Lorem ipsum
Lorem ipsum
Lorem
Lorem
有什么建議嗎?
uj5u.com熱心網友回復:
使用awk(使用 GNU 和 BSD 測驗awk):
awk -v max=3 '{print > sprintf("xxd", int(n/max))} /^$/ {n = 1}' file
uj5u.com熱心網友回復:
這awk也應該適用于空RS:
awk -v n=3 -v RS= '{ORS=RT; print > sprintf("xxd", int((NR-1)/n))}' file
uj5u.com熱心網友回復:
awk 對此有好處。
拆分每個n空行,命名檔案:
沒有前導零:
awk -v n=3 '
$0 == "" { c}
c <= n {print > "xx"f}
c==n {c=0; f}'
width最小寬度/零:
awk -v n=3 -v width=2 '
$0 == "" { c}
c <= n {print > "xx"f}
c==n {c=0; f; f = sprintf("%0*d",width,f)}'
要洗掉每個檔案中的尾隨空行,只需更改c <= n為c < n.
uj5u.com熱心網友回復:
removed './xx00'
removed './xx01'
removed './awkprof.out'
{m,g}awk '{
print >> sprintf("xx%0*.f%.*s", __-(_~_),
int(_/__),_<_,_ =!NF) }' FS='^$' __=3
-rw-r--r-- 1 501 75 Jun 8 09:19:10 2022 xx00
-rw-r--r-- 1 501 37 Jun 8 09:19:10 2022 xx01
../../Desktop/testdiremptylines/
1 Lorem ipsum
2 Lorem ipsum
3 Lorem ipsum
4
5 Lorem ipsum
6 Lorem ipsum
7
8 Lorem ipsum
9
xx00
1 Lorem ipsum
2 Lorem ipsum
3
4 Lorem
5 Lorem
xx01
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/491446.html
上一篇:函式內的Bash腳本變數范圍
