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