繁体   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