在awk和tail函数中使用双新行作为分隔符
我需要分离一个如下所示的文本文件在awk和tail函数中使用双新行作为分隔符,awk,tail,Awk,Tail,我需要分离一个如下所示的文本文件 1 00:01:03:321 --> 00:01:04:321 Randomtext1 2 00:02:03:321 --> 00:03:04:321 Randomtext2 Still random text2 3rd line of randomtext2 3 00:04:03:321 --> 00:05:04:321 Randomtext3 Stillrand 到块,包括序号行、计时器行、内容行,然后 删除序号行。 通过将代码
1
00:01:03:321 --> 00:01:04:321
Randomtext1
2
00:02:03:321 --> 00:03:04:321
Randomtext2
Still random text2
3rd line of randomtext2
3
00:04:03:321 --> 00:05:04:321
Randomtext3
Stillrand
到块,包括序号行、计时器行、内容行,然后
删除序号行。
通过将代码分成如下所示的块,我的意思是我希望将所有这些行作为一条记录(这样可以更容易地删除前两行(纯新行和序号行))
这是代码:
#!/bin/bash
name=text.sub
name2=text2.sub
awk '
BEGIN {FS="\n\n";
}
{
tail -n+1 $1;
}' $name > $name2
预期产出将为
00:01:03:321 --> 00:01:04:321
Randomtext1
00:02:03:321 --> 00:03:04:321
Randomtext2
Still random text2
3rd line of randomtext2
00:04:03:321 --> 00:05:04:321
Randomtext3
Stillrand
您可以使用此awk脚本执行此操作: script.awk
BEGIN { FS = "\n"
RS = "\n\n"
}
{ print $2
print $3
}
按如下方式运行:awk-f script.awk text.sub>text2.sub
通过将字段分隔符
FS
定义为换行符,将记录分隔符RS
定义为双换行符,我们将字段放入通常的$1、$2、$3
中,您可以使用此awk脚本执行此操作:
script.awk
BEGIN { FS = "\n"
RS = "\n\n"
}
{ print $2
print $3
}
按如下方式运行:awk-f script.awk text.sub>text2.sub
通过将字段分隔符
FS
定义为换行符,将记录分隔符RS
定义为双换行符,我们将字段放入通常的$1、$2、$3
中,我将对每个部分进行如下处理:
1
00:01:03:321 --> 00:01:04:321
随机文本1
作为个人记录
您可以使用记录和字段分隔符来实现这一点,如下所示:
awk '{$1=""}1' RS='' FS='\n' OFS='\n' file
是输入记录分隔符RS=''
有一个特殊的含义,它的意思是''
\n\n
将输入字段分隔符设置为换行符FS='\n'
\n`将输出字段分隔符设置为换行符OFS=
程序
{$1=“”}
删除第一个字段(数字),并1
打印记录。我会将每个部分视为:
1
00:01:03:321 --> 00:01:04:321
随机文本1
作为个人记录
您可以使用记录和字段分隔符来实现这一点,如下所示:
awk '{$1=""}1' RS='' FS='\n' OFS='\n' file
是输入记录分隔符RS=''
有一个特殊的含义,它的意思是''
\n\n
将输入字段分隔符设置为换行符FS='\n'
\n`将输出字段分隔符设置为换行符OFS=
{$1=”“}
删除第一个字段(数字)并1
打印记录。输入
1
00:01:03:321 --> 00:01:04:321
Randomtext1
2
00:02:03:321 --> 00:03:04:321
Randomtext2
awk 'BEGIN{RS="";FS="\n"}{printf "%s\n%s\n",$2,$3}' file
00:01:03:321 --> 00:01:04:321
Randomtext1
00:02:03:321 --> 00:03:04:321
Randomtext2
脚本
1
00:01:03:321 --> 00:01:04:321
Randomtext1
2
00:02:03:321 --> 00:03:04:321
Randomtext2
awk 'BEGIN{RS="";FS="\n"}{printf "%s\n%s\n",$2,$3}' file
00:01:03:321 --> 00:01:04:321
Randomtext1
00:02:03:321 --> 00:03:04:321
Randomtext2
输出
1
00:01:03:321 --> 00:01:04:321
Randomtext1
2
00:02:03:321 --> 00:03:04:321
Randomtext2
awk 'BEGIN{RS="";FS="\n"}{printf "%s\n%s\n",$2,$3}' file
00:01:03:321 --> 00:01:04:321
Randomtext1
00:02:03:321 --> 00:03:04:321
Randomtext2
输入
1
00:01:03:321 --> 00:01:04:321
Randomtext1
2
00:02:03:321 --> 00:03:04:321
Randomtext2
awk 'BEGIN{RS="";FS="\n"}{printf "%s\n%s\n",$2,$3}' file
00:01:03:321 --> 00:01:04:321
Randomtext1
00:02:03:321 --> 00:03:04:321
Randomtext2
脚本
1
00:01:03:321 --> 00:01:04:321
Randomtext1
2
00:02:03:321 --> 00:03:04:321
Randomtext2
awk 'BEGIN{RS="";FS="\n"}{printf "%s\n%s\n",$2,$3}' file
00:01:03:321 --> 00:01:04:321
Randomtext1
00:02:03:321 --> 00:03:04:321
Randomtext2
输出
1
00:01:03:321 --> 00:01:04:321
Randomtext1
2
00:02:03:321 --> 00:03:04:321
Randomtext2
awk 'BEGIN{RS="";FS="\n"}{printf "%s\n%s\n",$2,$3}' file
00:01:03:321 --> 00:01:04:321
Randomtext1
00:02:03:321 --> 00:03:04:321
Randomtext2
如果这不是您想要的,那么编辑您的问题以提供更真实的示例输入/输出
如果这不是您想要的,请编辑您的问题,以提供更真实的示例输入/输出。这如何
$ sed -n '2~4p;3~4p' file
00:01:03:321 --> 00:01:04:321
Randomtext1
00:02:03:321 --> 00:03:04:321
Randomtext2
从第2行和第3行开始,每隔4行打印一次。这个怎么样
$ sed -n '2~4p;3~4p' file
00:01:03:321 --> 00:01:04:321
Randomtext1
00:02:03:321 --> 00:03:04:321
Randomtext2
从第2行和第3行开始,每隔4行打印一次。我不确定您到底想做什么,但根据所需的输出,此命令会产生相同的结果:
awk '!/^[0-9]*$/' text.sub
我不确定您到底想做什么,但根据您想要的输出,此命令会产生相同的结果:
awk '!/^[0-9]*$/' text.sub
请添加预期输出并澄清:包括序号行在内的块。。。然后删除序号行请添加预期输出并澄清:对于包含序号行的块。。。然后删除序数行