这可能是一个简单的问题,但我很难找到解决方案,任何人都可以提供一个简单的UNIX sed或awk命令来删除文件的第3行和第4行,从第5行开始。
答案 0 :(得分:2)
如果您使用的是GNU sed,则可以使用FIRST~STEP
地址格式,例如
sed -e '6~3 d' -e '8~4 d' file
删除第6行,然后每隔3行删除第8行,然后删除第4行。
答案 1 :(得分:2)
假设我已理解这些要求,您可以按如下方式使用awk
:
pax$ echo '1
2
3
4
5
6
7
8
9
10
11
12
13
14
15' | awk '{if (((NR - 5) % 4 < 2) || (NR < 5)) {print}}'
1
2
3
4
5
6
9
10
13
14
如您所见,这使用NR
(行号)来决定是否打印该行。
从第5行开始,它会打印两个,然后无限制地跳过两个。低于5,它会打印所有内容。
如果我误解了你想要跳过哪些行,理论仍然合理,你只需要调整if
语句。
答案 2 :(得分:2)
awk解决方案,您将数字作为参数传递:
awk -v start=5 -v d1=3 -v d2=4 '
{n = NR - start}
n > 0 && (n % d1 == 0 || n % d2 == 0) {next}
1
'
这会跳过第8,11,14,......和9,13,17 ......,
行答案 3 :(得分:0)
Perl怎么样?
perl -pi -e 'print if $. < 5 or 1 == $. % 4 or 2 = $. % 4' your_file