awk 구분 기호 환경 설정

awk 구분 기호 환경 설정

탭으로 구분된 파일을 처리하기 위해 cygwin에서 임시 awk 명령을 작성 중입니다. 거의 모든 명령은 다음으로 시작됩니다.

BEGIN {FS="\t";OFS="\t";ORS="\r\n";}  

매번 입력하지 않으려면 이러한 구분 기호를 기본값으로 설정하려면 어떻게 해야 합니까?

답변1

~/.bashrc아마도 가장 쉬운 방법은 셸 별칭을 사용하는 것입니다( 셸 또는 이에 상응하는 항목 에 추가 ).

alias awktab="awk -v FS='\t' -v OFS='\t' -v ORS='\t'"

답변2

바로가기를 추가할 수도 있습니다. 예를 들어 Ctrl+를 터미널에 G삽입 하려면 다음 줄을 다음 줄에 추가하세요 .awk -v FS='\t' -v OFS='\t' -v ORS='\t'~/.inputrc

Control-G: "awk -v FS='\t' -v OFS='\t' -v ORS='\t'"

그런 다음 새 터미널을 열고 Ctrl+를 입력하고 G즉시 입력하세요!

답변3

POSIX는 무엇을 정의하므로특수변수 기본값예, 쉬운 옵션은 런타임에 덮어쓰는 것입니다(쉬운 옵션은 소스를 변경하는 것입니다).

이 경우 공통 코드(보통 블록 내부)를 라이브러리 파일에 넣을 gawk수 있습니다 . BEGIN {}기본 라이브러리 경로( /usr/share/awk/또는 /usr/local/share/awk) 에 배치하거나 AWKPATH환경 변수가 다음을 가리키는 위치에 배치하는 경우 전체 경로를 사용할 필요가 없습니다.

gawk -f tabfile.awk [...]

다른 awks와 달리 여러 옵션을 허용하고 gawk명령줄 과 프로그램 소스를 -f모두 혼합할 수 있습니다.-f

최신 버전은 추가 -i포함 파일 옵션(gawk-4.1.0 기준) 및 @include지시문(4.0.x AFAICT 기준)을 지원합니다. 다음은 약간 더 강력하고 친숙한 버전입니다 -f.

gawk '@include "tabfile"; /foo/ { ... }'

위 내용에는 또는 기본값 tabfile.awk의 라이브러리 경로가 포함됩니다. 오랫동안 지원되어 왔지만 이제는 쉘 스크립트 래퍼를 통해 gawk의 기능이 되었습니다 .AWKPATH@includeigawkgawk

이는 다음과 같은 두 가지 다른 좋은 답변과 호환됩니다.

alias awktab="gawk -i tabfile"

-v이 라이브러리 방법을 사용하는 것과 명령줄에서 사용하는 것 사이에는 미묘한 차이가 있습니다. 명령줄 옵션은 awk 코드가 실행되기 전에 적용되므로 라이브러리 코드가 실행될 때 설정됩니다. 이는 라이브러리 코드가 그러한 변수를 사용하는 경우(예: 데이터 파일 읽기) 중요할 수 있습니다.

관련 정보