特定の列のパターンを検索して行全体を出力します。

特定の列のパターンを検索して行全体を出力します。

私はHDFSで作業しており、4番目の列が数字5で始まる行全体を取得しようとしています。

100|20151010|K|5001
695|20151010|K|1010
309|20151010|R|5005
410|20151010|K|5001
107|20151010|K|1062
652|20151010|K|5001

したがって、次のように出力する必要があります。

100|20151010|K|5001
309|20151010|R|5005
410|20151010|K|5001
652|20151010|K|5001

ベストアンサー1

最も簡単な方法はおそらく次のとおりですawk

awk -F'|' '$4~/^5/' file

-F'|'フィールド区切り記号をに設定します|$4~/^5/4番目のフィールドがで始まる場合は真です5。何かがtrueと評価された場合、デフォルトのジョブはawk現在の行を印刷するので、上記のスクリプトは必要なものを印刷します。

他のオプションは次のとおりです。

  • 真珠

    perl -F'\|' -ane 'print if $F[3]=~/^5/' file
    

    同じ考えです。この-aスイッチは入力フィールドをperl与えられた値に従って配列に-F分割します@F。次に、配列(配列計算はゼロから始まる)の4番目の要素(フィールド)がで始まるかどうかを印刷します5

  • grep

    grep -E  '^([^|]*\|){3}5' file 
    

    正規表現は、後に a が 3 回、その後|に がない文字列と一致します。|5

  • GNUまたはBSDsed

    sed -En '/([^|]*\|){3}5/p' file 
    

    -E拡張正規表現を有効にし、-n一般出力を抑制します。正規表現は上記と同じで、grep最後のp正規表現はsed正規表現に一致する行だけを印刷します。

おすすめ記事