私は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またはBSD
sed
sed -En '/([^|]*\|){3}5/p' file
-E
拡張正規表現を有効にし、-n
一般出力を抑制します。正規表現は上記と同じで、grep
最後のp
正規表現はsed
正規表現に一致する行だけを印刷します。