파일을 배열에 로드하고 배열의 데이터를 사용하여 두 번째 파일을 처리합니다.

파일을 배열에 로드하고 배열의 데이터를 사용하여 두 번째 파일을 처리합니다.

저는 cygwin 환경에서 Windows 7을 사용하고 있습니다. 다음 명령을 사용하여 기존 awkscript를 실행하고 있습니다.

awk -f awkscript datafile.txt

awkscript는 datafile.txt의 데이터를 읽고 처리합니다. datafile.txt의 필드 중 하나는 코드입니다.

예: f1|f2|f3|f4

...여기서 f2 값은 코드입니다.

awkscript의 코드와 해당 설명을 함수의 배열로 하드코딩하고 처리 시 설명을 인쇄할 수 있지만 이는 나에게 엉성한 방법처럼 보입니다.

코드와 설명이 포함된 데이터의 예는 다음과 같습니다.

111|Description of 111
222|Description of 222
333|Description of 333

...여기서 111은 코드이고 "111에 대한 설명"을 인쇄하고 싶습니다. 이 파일을 호출하겠습니다.code-descr.txt

코드와 설명이 포함된 위의 파일은 절대 변경되지 않으므로 awkscript를 실행하고 code-descr.txt를 배열로 읽어오고 싶습니다.

이것을 명령줄에 어떻게 추가합니까 awk -f awkscript datafile.txt? 명령줄에 아무것도 추가할 필요가 없는 경우 런타임 시 항상 code-descr.txt를 배열로 읽으려면 어떻게 해야 합니까 awk -f awkscript datafile.txt?

답변1

노력하다

awk 'BEGIN { FS="|"} 
     FILENAME=="code-desc.txt" { descr[$1]=$2 ; next }
      { for(i=1;i<=FS;i++) printf "%s|",descr[$i] ; printf "\n" ;} '  code-desc.txt datafile.txt

어디

  • BEGIN { FS="|"} awk에게 구분 기호로 사용하도록 지시 |
  • FILENAME=="code-desc.txt" { descr[$1]=$2 ; next }code-desc.txt를 구문 분석하면 배열이 구성됩니다.
  • 다른 모든 줄의 경우 필드 설명을 인쇄합니다.

참고:

  • 파일 순서를 존중하십시오(datafile.txt 이전의 code-desc.txt).
  • 작은따옴표 사이의 코드를 awk 스크립트에 넣을 수 있습니다.
  • 코드가 잘못된 경우에는 작동하지 않습니다.

관련 정보