이와 같은 샘플 파일이 있습니다.
Zone A
Total Population 500 unit
Total Area 150 sq. unit
Zone B
Total Population 600 unit
Total Area 200 sq. unit
Zone C
Total Population 400 unit
Total Area 100 sq. unit
아래와 같이 지역명과 인구를 추출하는 방법은 무엇입니까?
A
500
B
600
C
400
답변1
이것은 awk에게는 사소한 작업입니다.
awk '/Zone/{print $2} /Population/{print $3}' file
Zone
현재 줄에 필드가 있으면 두 번째 필드를 인쇄하고 세 Population
번째 필드를 인쇄합니다.
답변2
이 시도,
awk '/Zone/ {print $2;getline; print $3}' file
A
500
B
600
C
400
getline
현재 줄 뒤의 다음 줄을 읽습니다.
답변3
grep
Perl 호환 정규식(PCRE)을 사용합니다 .
grep -Po 'Zone \K.*|[0-9]+(?= unit)' file
-P
Perl 호환 정규 표현식 활성화-o
일치하는 부분만 인쇄Zone \K.*
문자(.*
) 뒤에Zone
공백 문자가 오는 모든 문자와 일치합니다. 그 이전의 모든 내용은\K
인쇄되지 않습니다(폭이 0인 전방 탐색).|
또는[0-9]+(?= unit)
공백 문자와 가 뒤에 오는 하나 이상의 숫자와 일치합니다unit
. 너비가 0 인(?= unit)
전방 예측 어설션이며 해당 패턴(공백 문자 및unit
)도 인쇄되지 않습니다.
답변4
다음 명령을 통해 교체하십시오 sed
.
$ sed -En '/Zone/N; s/Zone ([A-Z]+).+ ([0-9]+).*/\1\n\2/p' file
A
500
B
600
C
400
커버 쉘"지역명" + "지역값":
$ sed -En '/Zone/N;N; s/Zone ([A-Z]+).+ ([0-9]+) sq.*/\1\n\2/p' file
A
150
B
200
C
100