cof*_*fee 7 sed text-processing
是否有一种非常简单的方法(也许使用一行 sed?)来获取每一行的n行,从这块行中的 ath 行开始?nm
更具体地说,我有一个包含数百万行的文件。对于每 4 行,我想获得前两行。
但我想我也想知道在其他类似情况下这样做。这就是为什么我在这里问了一个更一般的问题。
cho*_*oba 15
您可以~在 GNU sed 中的地址中使用:
sed -n '1~4p;2~4p'
Run Code Online (Sandbox Code Playgroud)
其内容为“每 4 行打印第一行,每 4 行打印第二行”或“从第 1 行开始,每 4 行打印一次,从第 2 行开始,每 4 行打印一次”。
don*_*sti 12
与gnu split:
n=2
m=4
split -l ${m} --filter="head -n ${n}" infile
Run Code Online (Sandbox Code Playgroud)
如果您只想在i第 th 行之后执行此操作,只需将前几行重定向到/dev/null:
n=2
m=4
i=7
{ head -n ${i} >/dev/null; split -l ${m} --filter="head -n ${n}"; } <infile
Run Code Online (Sandbox Code Playgroud)
如果您无法使用gnu工具,则可以使用awk:
awk -vn=2 -vm=4 -vi=7 'NR<=i{next}; (NR-i)%m==1{c=1}; c++<=n' infile
Run Code Online (Sandbox Code Playgroud)
对于 GNU sed
sed '3~4,+1 d' file
Run Code Online (Sandbox Code Playgroud)
或更一般的:
m=4
n=2
sed "$((m-n+1))~$m,+$((m-n-1)) d" file
Run Code Online (Sandbox Code Playgroud)