2016-09-23 1 views
-1

を見つけることで行を結合またはマージするのawkとここで可能私は(AWKを使用して多分)ソートする必要があるファイル内のいくつかのデータを持っているパターン

は、ファイルの小さなサンプルであれば、いくつかの助けをいただければ幸いです。..

DEFAULT,number,7996012132,,test,1,SP_A,SIX,,, 

,,,,FOUR,,, 

,,,,NINE,,, 

,,,,TWO,,, 

DEFAULT,number,7996020217,,test,1,SP_B,,,,, 

DEFAULT,number,7996020218,,test,1,SP_B,,,,, 

DEFAULT,number,7996020218,,test,1,SP_A,THREE,,, 

,,,,TWO,,, 

,,,,NINE,,, 

,,,,THREE,,, 

DEFAULT,number,7996020215,,test,1,SP_B,,,,, 

DEFAULT,number,7996020216,,test,1,SP_A,SIX,,, 

,,,,SEVEN,,, 

,,,,EIGHT,,, 

,,,,FOUR,,, 

私はわずか数本FOUR

0の行を除外したい

一緒ステップ2

DEFAULT,number,7996012132,,test,1,SP_A,SIX,,,,,,,FOUR,,,,,,,NINE,,,,,,,TWO,,, 
DEFAULT,number,7996020217,,test,1,SP_B,,,,, 
DEFAULT,number,7996020218,,test,1,SP_B,,,,, 
DEFAULT,number,7996020218,,test,1,SP_A,THREE,,,,,,,TWO,,,,,,,NINE,,,,,,,THREE,,, 
DEFAULT,number,7996020215,,test,1,SP_B,,,,, 
DEFAULT,number,7996020216,,test,1,SP_A,SIX,,,,,,,SEVEN,,,,,,,EIGHT,,,,,,,FOUR,,, 
の行をもたらすたいSTEP
DEFAULT,number,7996012132,,test,1,SP_A,,SIX,,,,,,,FOUR,,,,,,,NINE,,,,,,,TWO,,, 
DEFAULT,number,7996020216,,test,1,SP_A,,SIX,,,,,,,SEVEN,,,,,,,EIGHT,,,,,,,FOUR,,, 

STEP私はちょうど

7996012132 FOUR 

7996020216 FOUR 

任意のアイデアを、次の表示したい3?前もって感謝します!

+1

これは、コードの書き込みサービスではありません。これまでに何を試しましたか?あなたのコードを投稿してください!あなたがそれを走らせたとき何が起こったのですか?代わりに何が起こると思いますか?具体的に何が問題になっていますか? – Robert

答えて

1

はここに私のソリューションです:

awk 'BEGIN {line=""} /DEFAULT/ {print line; line=$0} !/DEFAULT/ {line = line""$0} END {print line}' data.txt | awk -F, '/FOUR/ {print $3" FOUR"}' 

説明:

# Initialize line variable to blank 
BEGIN { line="" }    

# If the line contains DEFAULT, print what we have and start a new aggregation 
/DEFAULT/ { print line; line=$0 } 

# If the line does not contain DEFAULT, add this line to the variable 
!/DEFAULT/ { line = line""$0 } 

# At the end, print whatever we have 
END { print line } 

次にあなたがフィールドセパレータとして,で「FOUR」を含む行をもとにしたい番号を解析することができます

awk -F, '/FOUR/ {print $3" FOUR"}' 
+0

素晴らしいアレックス、本当にありがとう、本当にありがとう!良い週末を! – Don

+0

私はあなたのために働いてうれしい!この解決策が助けになった場合、それを受け入れられるとマークすることができますか? – alexbclay

0

パートI:

/^$/ {next}          # this removes the empty records in your data 
{ 
    printf "%s", (NR > 1 && /^DEF/ ?ORS:"") $1 # print 
} 

テストそれ:

$ awk -f foo.awk foo.txt 
DEFAULT,number,7996012132,,test,1,SP_A,SIX,,,,,,,FOUR,,,,,,,NINE,,,,,,,TWO,,, 
DEFAULT,number,7996020217,,test,1,SP_B,,,,, 
DEFAULT,number,7996020218,,test,1,SP_B,,,,, 
DEFAULT,number,7996020218,,test,1,SP_A,THREE,,,,,,,TWO,,,,,,,NINE,,,,,,,THREE,,, 
DEFAULT,number,7996020215,,test,1,SP_B,,,,, 
DEFAULT,number,7996020216,,test,1,SP_A,SIX,,,,,,,SEVEN,,,,,,,EIGHT,,,,,,,FOUR,,, 

パートII:

/^$/ {next} 
/^DEF/ { 
    if(NR>1&&foo~/FOUR/)print foo;foo="" 
} 
{ 
    foo=foo $1 
} 
END{if(foo~/FOUR/) print foo} 
関連する問題