[英]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.