awk从match以标记打印方式插入行/记录
Awk程序应处理许多数据文件。在每个数据文件中,应查找模式并插入两行/记录和新字段。 (这只是一个例子。最终的程序必须在这个动作之后做更多的事情) 以数据文件为例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 && $
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}