2017-07-13 1 views
0

awkプログラムは、多くのデータファイルを処理する必要があります。各データファイルでパターンを探し、新しいフィールドを持つ2行/レコードを挿入する。 (これはほんの一例です。最終的なプログラムは、このアクションの次にさらに多くのことを行う必要があります)。例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} 

私はこれがGAWK経由で呼び出されているWindowsを使用しているため。 "NEWLINE2"

Record-1 
     newline1 
     newline2 
     newline2 
Record-n 

私は "旗" の使用に関連していると思う問題のdublicationの問題と

Record-1 
     newline1 
     newline2 
Record-n 

私の出力:

は出力を望んでいました。しかし、仕事中のawkプログラムの他のすべてのアクションを実行するためには、awkプログラムに影響を与えない限り、awkプログラムの他のすべてのアクションを実行するために、awkプログラムの他のアクションを実行するためには、awkプログラムを実行するためにaw30プログラムを実行します。ありがとうございました。

+0

あなたはここで、より明確なサンプルINPUT_FILEと期待される出力ファイルを追加していただけますか? – RavinderSingh13

答えて

0

あなたが言ったように、あなたは$1=="Record-2" ...で最後の印刷を削除することができるように理由flagの、最後の

flag!=0{print}; 

は、余分な印刷を行っている。

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} 

別のオプションがある可能性がありflagに別の条件を追加しますが、これがスクリプトを混乱させるかどうかはわかりません:

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} 
+1

私は働いています。私は現時点で第1の解決策を選んでいます。ここで私は印刷物を外します。とにかく、私は他のソリューションを詳しく見ていきます。大いに感謝する。 – colt

関連する問題