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는 사용법을 알고 있지만AWKPATH
bash는 그렇지 않습니다)
답변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',' | ...