Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在awk和tail函数中使用双新行作为分隔符_Awk_Tail - Fatal编程技术网

在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'
    将输入字段分隔符设置为换行符
  • OFS=
    \n`将输出字段分隔符设置为换行符

程序
{$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'
    将输入字段分隔符设置为换行符
  • OFS=
    \n`将输出字段分隔符设置为换行符
程序
{$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

请添加预期输出并澄清:包括序号行在内的块。。。然后删除序号行请添加预期输出并澄清:对于包含序号行的块。。。然后删除序数行