次のコマンドがありますが、何も出力されません。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
。