2017-04-17 6 views
1

私は以下の入力ファイルを持っており、その列に基づいてフィルタを配置する必要があります。ここで一致が見つかった場合はヘッダーを印刷し、そうでない場合はヘッダーを印刷しません。

cat test 
------------------------------------------------------------------------------------------ 
Client-code      ID  BONUS Availability   Offer  Credit 
------------------------------------------------------------------------------------------ 
BLAB-LO.AJBdLODikNcpok   SK-19 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJBluDikNcpok    SK-1 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJDaLAgNEp    SK-19 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJDaLDikNcpok    SK-1 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJDbLOAgNEp    SK-19 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJDbLODikNcpok   SK-19 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJHbmLO     SK-1 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJAcLOBollNcpok   SK-19 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJAcLOApkNamNk   SK-19 0  AVAILABLE    OFFERED  NA 
KONEAAO       SK-19 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJHbmLO     SK-11 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJAcLOBollNcpok   SK-1 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJAcLOApkNamNk   SK-10 0  AVAILABLE    OFFERED  NA 

、私はthis に基づいて、平等ではなく、正規表現を使用して、2列目のフィルタを入れています。

awk -v userInput='SK-1' 'NR<4 || $2 == userInput' test 
------------------------------------------------------------------------------------------ 
Client-code      ID  BONUS Availibility   Offer  Credit 
------------------------------------------------------------------------------------------ 
BLAB-LO.AJBluDikNcpok    SK-1 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJDaLDikNcpok    SK-1 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJHbmLO     SK-1 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJAcLOBollNcpok   SK-1 0  AVAILABLE    OFFERED  NA 

これは一致するものがあればうまく動作しますが、一致するものがなければ空のヘッダが得られます。私はヘッダー行を取り除きたい。 (最初の3行)。

これは望ましくありません。希望

awk -v userInput='SK-122' 'NR<4 || $2 == userInput' test 
------------------------------------------------------------------------------------------ 
Client-code      ID  BONUS Availibility   Offer  Credit 
------------------------------------------------------------------------------------------ 

一致がない場合は、私が取得する必要があります:空白または不一致がメッセージを見つけました。

awk -v userInput='SK-122' 'NR<4 || $2 == userInput' test 

答えて

1
$ awk -v userInput='SK-1' ' 
    NR<4 { hdr = hdr $0 ORS; next } 
    $2 == userInput { print hdr $0; hdr="" } 
    END { if (hdr!="") print "No match found" } 
' file 
------------------------------------------------------------------------------------------ 
Client-code      ID  BONUS Availability   Offer  Credit 
------------------------------------------------------------------------------------------ 
BLAB-LO.AJBluDikNcpok    SK-1 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJDaLDikNcpok    SK-1 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJHbmLO     SK-1 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJAcLOBollNcpok   SK-1 0  AVAILABLE    OFFERED  NA 
2

だけヘッダを格納し、第ユーザ入力が一致する場合にのみ、それを印刷する必要があります

awk -v userInput='SK-1' 'NR<4{header=sprintf("%s%s\n", header,$0);next}$2 == userInput{if (!i){printf("%s",header)};i=1;print}' test 

awk -v userInput='SK-1' 'NR<4{header=sprintf("%s%s\n", header,$0);next} 
       $2 == userInput{if (!i){printf("%s",header)};i=1;print} 
       END{if (!i){print "Not found"}}' test 
2

バッファ、印刷、クリーン:

$ awk -v i="SK-1" 'NR<4{b=b $0 "\n"} $2==i {b=b $0; print b; b=""}' file 
------------------------------------------------------------------------------------------ 
Client-code      ID  BONUS Availability   Offer  Credit 
------------------------------------------------------------------------------------------ 
BLAB-LO.AJBluDikNcpok    SK-1 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJDaLDikNcpok    SK-1 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJHbmLO     SK-1 0  AVAILABLE    OFFERED  NA 
BLAB-LO.AJAcLOBollNcpok   SK-1 0  AVAILABLE    OFFERED  NA 
関連する問題