【发布时间】:2019-01-12 09:28:36
【问题描述】:
编辑:作为参考,“stuff”是一个通用变量,“KEEP”也是如此。 KEEP 可以是第 2 行的“嗨,我叫 Dave”和第 7 行的“I love pie”。我在此处输入的数字仅用于说明,不会出现在数据中。
我有一个需要解析的文件,每 4 行保留一次,从第 3 行开始。换句话说,它看起来像这样:
1 stuff
2 stuff
3 KEEP
4
5 stuff
6 stuff
7 KEEP
8 stuff etc...
太好了,sed 轻松解决了这个问题:
sed -n -e 3~4p myfile
给我
3 KEEP
7 KEEP
11 KEEP
现在我有了不同的文件格式和不同的模式:
1 stuff
2 KEEP
3 KEEP
4
5 stuff
6 KEEP
7 KEEP etc...
我仍然想要
的输出2 KEEP
3 KEEP
6 KEEP
7 KEEP
10 KEEP
11 KEEP
这就是问题所在 - 这是 sed 的多模式“模式”。它是“每 4 行,吐出 2 行,但从第 2 行开始”。
我是否需要在我的 sed 中使用某种 DO/FOR 循环,还是需要其他命令,例如 awk 或 grep?到目前为止,我已经尝试过以下格式:
sed -n -e '3~4p;4~4p' myfile
和
awk 'NR % 3 == 0 || NR % 4 ==0' myfile
和
sed -n -e '3~1p;4~4p' myfile
和
awk 'NR % 1 == 0 || NR % 4 ==0' myfile
来源:https://superuser.com/questions/396536/how-to-keep-only-every-nth-line-of-a-file
【问题讨论】:
-
能否请您在代码标签中提及明确的预期输出并告诉我们。
-
@RavinderSingh13 完成 - 它位于“新模式”之后的中间
-
你能检查一下粘贴的命令吗?
-
简单来说,我们如何知道要打印哪一行?由于您不是在搜索特定的字符串等。请务必提及。
-
sed 用于在单独的行上执行
s/old/new就是这样。如果您需要做任何其他事情,那么甚至不要考虑使用 sed,只需使用 awk,因为结果将是更清晰、更简单、更高效、更便携、更健壮、更易于维护、更易于增强等的某种组合。