awk条件付きが機能しない

awk条件付きが機能しない

次のコマンドがありますが、何も出力されません。print $0または、任意の列(たとえば、、print $2)を維持すると、print $3期待どおりに印刷されます。 「if文」を読んでいないようです。

awk -F"," '{if ($2 >= 09170000000 && $2 <= 09179999999) print $0 }' filename

サンプルファイル:

"dummy","09171234567","","dummy","dummy","dummy","dummy"

答え1

カンマで区切られた方法でデータを読み取るように指示したため、引用符awkはデータの一部になり、整数の比較は失敗します。

$ awk -F',' '{ print $2 }' file.txt
"09171234567"

代わりに、カンマを引用符で囲むことができます。

$ awk -F'"?,"?' '{ print $2 }' file.txt
09171234567

この表現は、"?,"?「カンマ、前、および/または後のオプションの二重引用符」を意味します。

最終awkコード:

$ awk -F'"?,"?' '$2 >= 09170000000 && $2 <= 09179999999' file.txt
"dummy","09171234567","","dummy","dummy","dummy","dummy"

どのブロックの条件も真と評価されない場合、{...}現在の入力ラインが出力されます。

答え2

引用符内の列#2はテキストであり、"..."整数比較を行っているためです。次のように区切り記号の1つとして定義し、両方を基準にして"列5を比較すると、列5になります。,"

awk -F'[",]' '{if ($5>= 09170000000 && $5 <= 09179999999) print $0 }' infile

または短く言うと:

awk -F'[",]' '$5>= 09170000000 && $5 <= 09179999999' infile

,2と区切り文字を使用すると、列"番号が(col#*3)-1所定の位置になります。つまり、$30以前に列にいた場合は、今は列にあるという意味です$89

関連情報