簡體   English   中英

bash - 如何刪除文件的每第 n 行

[英]bash - how to delete every nth line of a file

我有這個

line1
line2
line3
line4
line5
line6
line7
line8
line9
line10
line11
line12
line13
line14
line15

我的目標是擁有

line1
line3
line4
line6
line7
line9
line10
line12
line13
line15

我嘗試了下面的代碼,但它沒有做我想要的。 我不確定我做錯了什么。

awk 'NR == 1 || NR % 3 != 0' file 

關於原因的任何線索?

你必須使用正確的想法% 3 -剛剛關閉的一個,因為你要刪除第2行開始,而不是3.測試NR == 1是多余的,屬於模量試驗中,但它並沒有引起任何麻煩:

$ awk '(NR+1) % 3' file
line1
line3
line4
line6
line7
line9
line10
line12
line13
line15

你可以只使用 GNU sed:

 sed -i '2~3d' test.txt

您也可以刪除-i以防您不想保存結果。


sed 手冊頁的摘錄:

first~step 匹配從 line first 開始的每 step'th 行。 例如, sed -n 1~2p將打印輸入流中的所有奇數行,地址2~5將匹配每第五行,從第二行開始。

要忽略示例輸出中的行,請使用

awk 'NR % 3 != 2' file

您可以使用:

awk '(NR+1)%3' file
line1
line3
line4
line6
line7
line9
line10
line12
line13
line15

這將跳過從第 2 行開始的每 3 行。 所以第 2、5、8、11、14 行將被跳過。

這是使用便攜式sed一種方法。

要刪除每 3 行:

sed 'n; n; d' infile

從第 2 行開始刪除每 3 行:

sed '1n; 2d; n; n; d' infile

輸出:

line1
line3
line4
line6
line7
line9
line10
line12
line13
line15

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM