awk를 사용하여 특정 열 조건을 인쇄하는 방법은 무엇입니까?

awk를 사용하여 특정 열 조건을 인쇄하는 방법은 무엇입니까?

입력 파일이 있습니다.

A 123 name: 1 AAA  
B 123 name: 2 AAA name: 3 BBB  
C 234 name: 1 AAA name: 2 BBB name: 5 CCC 

열이 "name:"인 경우 다음 열과 다음 열을 인쇄하고 싶습니다.

이것은 내 awk 코드입니다.

cat input.txt | awk '{for(i=1;i<=NF;i++)if($i == "name:")print $(i+1),$(i+2)}'

그러나 이 예에서는 아래와 같이 모든 열이 하나의 행에 나열됩니다.

1 AAA  
2 AAA  
3 BBB  
1 AAA  
2 BBB  
5 CCC

다음과 같이 열을 인쇄하고 싶습니다.

1 AAA  
2 AAA 3 BBB    
1 AAA 2 BBB 5 CCC

답변1

같은 줄에 값을 인쇄하고 해당 행이 반복을 완료한 후 새 행을 삽입하려면 다음 print으로 바꾸세요 .printf

awk '{{for(i=1;i<=NF;i++)if($i == "name:") printf $(i+1)" "$(i+2)" "} print ""; }' yourfile

산출:

1 AAA 
2 AAA 3 BBB 
1 AAA 2 BBB 5 CCC

관련 정보