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