Awk - 数字が列1と2の間にある場合、行を印刷します。

Awk - 数字が列1と2の間にある場合、行を印刷します。

次の形式のデータを含むファイルがあります。

入力ファイル

"1930","1946","FOO","BAR","GREEN"
"1949","1962","FOO","BAR","BLUE"
"1970","1980","FOO","BAR","YELLOW"

数字が連続しておらず、時々大きな間隔がある場合もあります。最初の2つの列の間に一致する数値に対して、次の一致する行が返されることを望みます。

例:

番号1952の予想出力

1952:
"1949","1962","FOO","BAR","BLUE"

AWKまたは他のbashスクリプトが可能です。

ベストアンサー1

$ awk -F',' -v y=1952 'BEGIN{print y":"} {line=$0;gsub("\"","");} $1+0<=y && y<=$2+0 {print line}' file
1952:
"1949","1962","FOO","BAR","BLUE"

どのように動作しますか?

  • -F','

    これにより、フィールド区切り文字がコンマに設定されます。

  • -v y=1952

    これはy、値1952のawk変数を定義します。

  • BEGIN{print y":";}

    これにより、ヘッダー行が印刷されます。

  • line=$0; gsub("\"","")

    これにより、元の行がとして保存されますline。次に、フィールドから二重引用符を削除します。

  • $1+0<=y && y<=$2+0 {print line}

    値がy最初の列と2番目の列の値の間にある場合は、原稿を印刷しますline

    上記の行では、最初の列と2番目の列の数字にゼロが追加されました。これにより、awkはこれらの列を文字列ではなく数値として扱うため、文字列比較ではなく数値比較を実行します。

おすすめ記事