탭으로 구분된 파일을 처리하기 위해 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
@include
igawk
gawk
이는 다음과 같은 두 가지 다른 좋은 답변과 호환됩니다.
alias awktab="gawk -i tabfile"
-v
이 라이브러리 방법을 사용하는 것과 명령줄에서 사용하는 것 사이에는 미묘한 차이가 있습니다. 명령줄 옵션은 awk 코드가 실행되기 전에 적용되므로 라이브러리 코드가 실행될 때 설정됩니다. 이는 라이브러리 코드가 그러한 변수를 사용하는 경우(예: 데이터 파일 읽기) 중요할 수 있습니다.