从文件中打印每n行

use*_*718 2 variables bash sed

我试图n从文件中打印每一行,但n不是常量而是变量.

例如,我想sed -n '1~5p'用类似的东西替换sed -n '1~${i}p'.

这可能吗?

fed*_*qui 8

awk 也可以更优雅的方式做到:

awk -v n=YOUR_NUM 'NR%n==1' file
Run Code Online (Sandbox Code Playgroud)

-v n=YOUR_NUM你指出号码.然后,NR%n==1当行号在表格上时,评估为true 7n+1,因此它打印该行.

注意使用它有多好awk:如果你想要表格中的线条7n+k,你只需要做:awk -v n=7 'NR%n==k' file.

让我们每7行打印一次:

$ seq 50 | awk -v n=7 'NR%n==1'
1
8
15
22
29
36
43
50
Run Code Online (Sandbox Code Playgroud)

或者在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
Run Code Online (Sandbox Code Playgroud)


Ken*_*ent 8

关键是,您应该使用双引号"而不是单引号来包装您的sed代码.变量不会在单引号内扩展.所以:

sed -n "1~${i} p"
Run Code Online (Sandbox Code Playgroud)