AWK初心者なので教えて下さい。 数千行以上あるファイル内に以下のような文字列があるとします。 &#… | 質問の答えを募集中です! AWK初心者なので教えて下さい。 数千行以上あるファイル内に以下のような文字列があるとします。 &#… | 質問の答えを募集中です!

AWK初心者なので教えて下さい。 数千行以上あるファイル内に以下のような文字列があるとします。 &#…

未分類

AWK初心者なので教えて下さい。
数千行以上あるファイル内に以下のような文字列があるとします。

————————————————


TTT SSS UUU
XXX YYY ZZZ
AAA BBB CCC
DDD EEE CCC
FFF GGG CCC



————————————————

ZZZが存在する行の下3行の3フィールド目の文字(上記の場合はCCC)が同じ文字の場合

ZZZの存在する1行と下の3行の計4行を表示するAWK文ってどうなりますか?

表示結果は以下のようになります。

XXX YYY ZZZ
AAA BBB CCC
DDD EEE CCC
FFF GGG CCC

  1. 匿名 より:

    >takashi_802さん

    いろいろなやり方あると思いますが、以下でもできました。

    ***データファイル 1.dat
    TTT SSS UUU
    XXX YYY ZZZ
    AAA BBB CCC
    DDD EEE CCC
    FFF GGG CCC
    TTT SSS UUU
    XXX YYY ZZZ
    AAA BBB CCC
    DDD EEE CCC
    TTT SSS UUU

    ***** 入力コマンド
    cat 1.dat | awk ‘BEGIN{ff=0;B=””} / ZZZ$/{ f=1; B=$0 } / CCC$/ { f=f+1; B=B “n” $0 ;if(f==3) {print B; f=0} } !/ CCC$/ {f=0}’

    ***** その時の出力
    XXX YYY ZZZ
    AAA BBB CCC
    DDD EEE CCC
    FFF GGG CCC

    ***** 簡単な解説
    最初: f=0,B=0にセット
    ” ZZZ”が最後にきてる行の時: f=1 にする Bに自分の行を保存
    ” CCC”が最後にきてる行の時: f=f+1 にして、Bに改行コード+自分の行を追加、fが3なら表示してfをクリア。
    ” CCC”じゃない行の時: f=0

    ****蛇足
    複数行マッチできる言語あるので、それを使った方が良いと思います。Perlとか。

    ****追記1
    Perlでも作ってみました。ちょっと不細工ですがちゃんと動いてると思います。
    (テストはLinuxで行ないました。改行コードをnに決めうちしちゃってるので、Windowsのファイルの場合もしかしたらnを rnにしないと駄目かも。)

    ++01.plとして保存
    #!/usr/bin/perl
    @i=<>;
    $i=join(“”,@i);

    while(length($i)>3) {
    if( $i=~ /(.*?)([^n]* ZZZn.* CCCn.* CCCn.* CCC(n|$))((.|[n])*)/ ) {
    print $2;
    $i=$3;
    } else {
    $i=””;
    }
    }

    ***動作確認時 perl 01.pl < 1.dat としたときの出力 XXX YYY ZZZ AAA BBB CCC DDD EEE CCC FFF GGG CCC よろしくお願い致します。

  2. 匿名 より:

    お二人の温かい回答を有難うございました。
    >buynnnmmm1さん
    動作チェックと解説付きで勉強になりました!!
    もっともっと勉強してbuynnnmmm1さんのようにAWKマスターになります!

    >blacktoookさん
    buynnnmmm1さんとは違うパターンとして参考にさせて頂きます。

  3. 匿名 より:

    uniq -c -2 130209.dat | awk ‘{if($1!=1&&$1!=3){count+=$1;TMP=””;}else if($1==1){count+=$1;TMP=$2 ” ” $3 ” ” $4;}else if($1==3&&TMP!=””){count+=$1;print TMP;TMP=”head -n ” count ” 130209.dat | tail -n 3″;system(TMP);}}’

    くっさいの書いてみた。通らなかったらごみん。
    うまくいったらBAは先着の方に。



 ⬇人気の記事!⬇

タイトルとURLをコピーしました