파일에서 특정 값 추출

파일에서 특정 값 추출

이와 같은 샘플 파일이 있습니다.

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

grepPerl 호환 정규식(PCRE)을 사용합니다 .

grep -Po 'Zone \K.*|[0-9]+(?= unit)' file
  • -PPerl 호환 정규 표현식 활성화
  • -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

관련 정보