簡體   English   中英

打印文件中的每n行

[英]Print every n lines from a file

我正在嘗試從文件中打印第n行,但是n不是常數而是變量。

例如,我想用sed -n '1~5p' sed -n '1~${i}p'代替sed -n '1~5p' sed -n '1~${i}p'

這可能嗎?

awk也可以用更優雅的方式做到這一點:

awk -v n=YOUR_NUM 'NR%n==1' file

使用-vn=YOUR_NUM您可以指定數字。 然后,僅當行號采用7n+1形式時, NR%n==1計算結果才為true,因此它會打印行。

請注意,使用awk這樣做有多好:如果您想要7n+k形式的行,則只需執行以下操作: awk -vn=7 'NR%n==k' file

讓我們每7行打印一次:

$ seq 50 | awk -v n=7 'NR%n==1'
1
8
15
22
29
36
43
50

或在sed

$ n=7
$ seq 50 | sed -n "1~$n p" # quote the expression, so that "$n" is expanded
1
8
15
22
29
36
43
50

關鍵是,您應該使用雙引號"而不是單引號來包裝sed代碼。變量不會在單引號內擴展。因此:

sed -n "1~${i} p"

例如,您可以這樣做:

i=3
sed "2,${i}s/.*/changed line/g" InputFile

例:

AMD$ cat File
aaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccc
ddddddddddddddddddddddd
eeeeeeeeeeeeeeeeeeeeeeee
fffffffffffffffffffff
ggggggggggggggggggggg

AMD$ i=4; sed "2,${i}s/.*/changed line/g" File
aaaaaaaaaaaaaaaaaaaaaaaa
changed line
changed line
changed line
eeeeeeeeeeeeeeeeeeeeeeee
fffffffffffffffffffff
ggggggggggggggggggggg

關鍵是使用" "進行變量替換。

為什么要sed?

head -${i} YourFile

暫無
暫無

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

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