最初の列条件に基づいて行全体を印刷するには、awk ifを使用してください。

最初の列条件に基づいて行全体を印刷するには、awk ifを使用してください。

test_data.txtというファイルがあります。ファイルの内容は次のとおりです。

20:20:20 test1
20:21:21 test2
20:21:49 test3
20:21:57 test4
20:21:57 test5
20:21:57 test6
20:22:57 test7
20:25:59 test8
20:25:59 test9
20:25:59 test10
20:25:59 test11
20:29:03 test12
20:29:04 test13
20:29:31 test14

たとえば、最初の列は私が検索したいものです。最初の列には時:分:秒(HH:MM:SS)が表示されます。時間と分が満たされたら、変数を使用して行全体のデータを抽出したいと思います。

var1=20:20
var2=20:22
cat test_data.txt | awk '{if ($1 == "'"$var1"'" || $1 == "'"$var2"'") print $0;}'

予想出力:

20:20:20 test1
20:22:57 test7

私が使用しているawkは数秒以内に検索したくないので、明らかに動作しません。以下のアプローチはうまくいきますが、例で複数の変数を使用する方法は次のとおりです。

var1=20:20
var2=20:22
ERE='^'$var1':[[:digit:]]+$' <test_data.txt awk '$1 ~ ENVIRON["ERE"]'

上記が同じコマンドで複数の変数で動作するかどうかはわかりません。

上記のコマンドの出力:

20:20:20 test1

ベストアンサー1

複数のHH:MM値をスペースで区切られた文字列としてawkに渡すことができ、この文字列はawk BEGINブロックの配列に分割されます。次に、データファイルの各レコードに対して$ 1がHH:MM文字列の1つで始まるかどうかをテストします。

awk -v times="20:20 20:22" '
  BEGIN {n = split(times, t)}
  {for (i=1; i<=n; i++) if (index($1, t[i]) == 1) {print; break}}
' test_data.txt

おすすめ記事