다음 명령을 사용하여 파일에서 두 단어를 검색합니다 grep
.
grep "ADDR|USCDB" VLR.txt |awk -F" " '{print $3 " " $4}' > prueba.txt
출력은 다음과 같습니다
2021-03-12 14:27:15
RESULT=VLR, ADDR="573025000022";%%
2021-03-12 14:27:15
RESULT=VLR, ADDR="573025000023";%%
2021-03-12 14:27:15
RESULT=VLR, ADDR="573025000024";%%
내가 달성하고 싶은 것은 날짜와 결과를 같은 줄에 표시하는 것입니다.
2021-03-12 14:27:15 RESULT=VLR, ADDR="573025000022";%%
2021-03-12 14:27:15 RESULT=VLR, ADDR="573025000023";%%
2021-03-12 14:27:15 RESULT=VLR, ADDR="573025000024";%%
답변1
USCDB
각 줄 앞에는 항상 다음이 붙는다고 가정합니다 ADDR
.
awk '$2 == "USCDB" { date = $3 " " $4 } $4 ~ /^ADDR=/ { print date, $3, $4 }' input
date
행이 발견될 때마다 USCDB
변수에 날짜가 저장됩니다 . 행이 발견 되면 ADDR
이 값이 필드 3 및 4와 함께 출력됩니다.
ADDR
USCDB
또한 두 문자열을 일치시키고 전체 행에서 일치시키는 것보다 특정 필드에서만 일치시키는 것에 대해 더 엄격합니다 .
테스트할 데이터가 없기 때문에 코드는 테스트되지 않았습니다(스크린샷이 있었지만 지금은 없어졌습니다).
답변2
출력에 레코드 구분 기호를 할당할 수 있으며 ORS
이는 각 인쇄 문에 암시적으로 추가됩니다.
grep .... |
awk '{
ORS = ORS == "\n" ? "" : "\n"
print $3, $4
}'
이 방법은 두 개의 데이터 라인이 차례로 쌍을 이루기 때문에 작동합니다. 따라서 첫 번째 부분에서는 ORS를 공백으로 설정하고 두 번째 부분은 개행으로 설정했습니다. 쉼표는 세 번째 필드와 네 번째 필드를 구분하는 역할을 합니다.