저는 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 스크립트에 넣을 수 있습니다.
- 코드가 잘못된 경우에는 작동하지 않습니다.