첫 번째 열 조건에 따라 전체 줄을 인쇄하려면 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 문자열 중 하나로 시작하는지 테스트합니다.

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

답변2

일부 기반@glennjacman의 코드- 목표 시간을 기준으로 해시 테이블을 생성하고 효율성을 위해 입력 값에 대한 해시 조회를 사용할 수 있습니다.

awk -v times="20:20 20:22" '
    BEGIN {
        split(times, tmp)
        for ( i in tmp ) {
            t[tmp[i]]
        }
        FS = ":"
    }
    ($1 FS $2) in t
' test_data.txt
20:20:20 test1
20:22:57 test7

관련 정보