awk: 경로에 스크립트가 있나요?

awk: 경로에 스크립트가 있나요?

awk경로에 작은 스크립트를 넣는 방법이 있습니까 ?

예를 들어, 매우 유용한 데이터 정렬 작업이 있습니다.

// collate-csv.awk
FNR > 1 || NR == 1

모든 종류의 멋진 방법으로 사용할 수 있습니다.

xargs -a $(find * -name *.csv) awk -F',' -f collate-csv.awk | ...

유일한 문제는 어디에서나 awk 도구를 호출할 수 없다는 것입니다. 실행 가능한 셸 스크립트를 사용하면 경로의 bin 폴더에 넣을 수 있습니다. awk실행 불가능한 소스 파일을 파일 시스템의 어느 곳에서나 사용할 수 있도록 하는 메커니즘이 Linux에 있습니까 ?

("메커니즘"이 "그냥 망치로 때리는 게 어때?" 유형의 패치워크가 아니라고 가정)

답변1

@Roamia의 답변 외에도 AWKPATH변수를 찾을 디렉토리 목록으로 사용할 수도 있습니다.collate-csv.awk

AWKPATH=${HOME}/include/awk:/some/other/path
export AWKPATH
xargs -a $(find * -name *.csv) awk -f collate-csv.awk -F',' | ...

참고하세요

  • .awk확장은 일관성이 있는 한 필수는 아닙니다.
  • #!/usr/bin/awk -f스크립트가 독립 실행형(호출되지 않음)으로 사용될 때 shebang 라인은 필수입니다 awk -f. 예를 들어,
  • 당신은 사용해야합니다 awk -f(그리고 awk는 사용법을 알고 있지만 AWKPATHbash는 그렇지 않습니다)

답변2

실행 가능한 awk스크립트를 생성하여$PATH

mkdir -p "$HOME/bin"
cat >"$HOME/bin/collate-csv <<'x'
#!/usr/bin/awk -f
#
# collate-csv.awk
#
NR == 1 { print }
FNR == 1 { next }
{print}
x

chmod a+x "$HOME/bin/collate-csv"
export PATH="$PATH:$HOME/bin"

이제 collate-csv다른 명령처럼 사용할 수 있습니다

xargs -a $(find * -name *.csv) collate-csv -F',' | ...

관련 정보