Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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从match以标记打印方式插入行/记录_Awk_Gawk - Fatal编程技术网

awk从match以标记打印方式插入行/记录

awk从match以标记打印方式插入行/记录,awk,gawk,Awk,Gawk,Awk程序应处理许多数据文件。在每个数据文件中,应查找模式并插入两行/记录和新字段。 (这只是一个例子。最终的程序必须在这个动作之后做更多的事情) 以数据文件为例 Rec not needed-1 Rec not needed-2 Rec not needed-n start Record-1 Record-2 Record-n 它是以制表符分隔的,这里只有1美元 源程序 BEGIN { OFS=FS="\t"} FNR==1 {flag=0;} p; #flag && $

Awk程序应处理许多数据文件。在每个数据文件中,应查找模式并插入两行/记录和新字段。 (这只是一个例子。最终的程序必须在这个动作之后做更多的事情)

以数据文件为例

Rec not needed-1
Rec not needed-2
Rec not needed-n
start
Record-1
Record-2
Record-n
它是以制表符分隔的,这里只有1美元

源程序

BEGIN { OFS=FS="\t"}

FNR==1 {flag=0;} p; 
#flag && $1!=""{$1=$1; print}

$1=="Record-2" && flag{$1="";$2="newline1"; print; $1=""; $2="newline2"; print}
#$1=="Record-2" {flag=1} p {$1=""; $2="newline1"; print; $1=""; $2="newline2"; print; flag=0} 1

flag!=0{print};
/start/{flag=1}
因为我使用的是Windows,所以称之为via GAWK

想要的输出:

Record-1
        newline1
        newline2
Record-n
我的输出与“newline2”的双重应用问题

我认为问题与“旗帜”的使用有关。但为了在工作中执行awk程序的所有其他操作

FNR==1 {flag=0;} p; 
...    
flag!=0{print};
/start/{flag=1}

应该保持不变——只要它不会“伤害”。谢谢。

正如你所说,由于
标志,最后一个

flag!=0{print};
正在进行额外打印,因此您可以删除
$1==“Record-2”中的最后一个打印…

BEGIN { OFS=FS="\t"}

FNR==1 {flag=0} 
#flag && $1!=""{$1=$1; print}

$1=="Record-2" && flag{$1="";$2="newline1"; print; $2="newline2"}
#$1=="Record-2" {flag=1} p {$1=""; $2="newline1"; print; $1=""; $2="newline2"; print; flag=0} 1

flag!=0{print}
/start/{flag=1}
另一个选项是向
标志添加另一个条件,但不知道这是否会打乱脚本:

BEGIN { OFS=FS="\t"}

FNR==1 {flag=0} 
#flag && $1!=""{$1=$1; print}

$1!="Record-2" && flag!=0 {print}

$1=="Record-2" && flag{$1="";$2="newline1"; print; $2="newline2"; print}
#$1=="Record-2" {flag=1} p {$1=""; $2="newline1"; print; $1=""; $2="newline2"; print; flag=0} 1

/start/{flag=1}
或:


您能在这里添加更清晰的示例输入文件和预期输出文件吗?我工作。我现在选择第一种解决方案,在那里我可以打印。无论如何,我会仔细看看其他的解决方案。多谢各位。
BEGIN { OFS=FS="\t"}

FNR==1 {flag=0} 
#flag && $1!=""{$1=$1; print}

$1!="Record-2" && flag!=0 {print}

$1=="Record-2" && flag{$1="";$2="newline1"; print; $2="newline2"; print}
#$1=="Record-2" {flag=1} p {$1=""; $2="newline1"; print; $1=""; $2="newline2"; print; flag=0} 1

/start/{flag=1}
BEGIN { OFS=FS="\t"}

FNR==1 {flag=0} 
#flag && $1!=""{$1=$1; print}

$1=="Record-2" && flag{$2="newline1"; print "\t"$2; $2="newline2"; print "\t"$2}
#$1=="Record-2" {flag=1} p {$1=""; $2="newline1"; print; $1="";    $2="newline2"; print; flag=0} 1

$1!="Record-2" && flag!=0{print}
/start/{flag=1}