다음 스크립트를 작성하고 이름을 지정 find
하고 저장했지만 bin
예상한 결과가 나오지 않습니다. 실행하면 find TEST
모든 줄의 모든 항목과 일치하고 TEST
출력이 제공됩니다. 하지만 내 스크립트가 TEST
첫 번째 열에서만 보이도록 하고 싶습니다 . 사용하고 grep
있는데 사용하면 할 수 있을 것 같았는데 awk
사용하면 안되네요 awk
.
입력 파일:
DEV RETAIL RETAILDEVNode
TEST RETAIL RETAILTESTNode
TEST AUDIT AUDITTESTNode
QA AUDIT AUDITQANode
PROD SALE SALEPRODNode
QA SALE SALETESTNode
QA FINANCE FINANCEQANode
PROD FINANCE FINANCEPRODNode
grep $1 inputfile`
산출:
TEST RETAIL RETAILTESTNode
TEST AUDIT AUDITTESTNode
QA SALE SALETESTNode
예상 출력:
TEST RETAIL RETAILTESTNode
TEST AUDIT AUDITTESTNode
답변1
그리고앗:
$ awk '$1=="TEST"' file
TEST RETAIL RETAILTESTNode
TEST AUDIT AUDITTESTNode
그리고grep:
$ grep '^TEST ' file
TEST RETAIL RETAILTESTNode
TEST AUDIT AUDITTESTNode
그리고sed:
$ sed -n '/^TEST /p' file
TEST RETAIL RETAILTESTNode
TEST AUDIT AUDITTESTNode
그리고진주:
$ perl -ane 'print if $F[0] eq "TEST"' file
TEST RETAIL RETAILTESTNode
TEST AUDIT AUDITTESTNode
그리고루비:
$ ruby -ane 'puts $_ if $F[0] == "TEST"' file
TEST RETAIL RETAILTESTNode
TEST AUDIT AUDITTESTNode
유천세게 때리다:
while IFS= read -r line; do
[[ $line == TEST* ]] && echo "$line"
done < file
TEST RETAIL RETAILTESTNode
TEST AUDIT AUDITTESTNode
마지막으로 스크립트를 사용하십시오.find_by_first_field
find
스크립트 이름으로 사용 하지 마십시오 :
find
변수가~/bin
이전에 존재했다면 시스템을 덮어씁니다./usr/bin
PATH
- 스크립트의 기능을 좀 더 설명하는 이름으로 이름을 지정하는 것이 좋습니다.
cat ~/bin/find_by_first_field
#!/bin/bash
exec awk -v arg=${1:?} '$1==arg' "${@:2}"
용법:
find_by_first_field <PATTERN> <file1> [file2 file3]
설명하다:
-v arg
awk
내부적으로 변수를 전달하는 방법이 있나요 ?$1
첫 번째 인수와 혼동하지awk
않도록 첫 번째 필드(공백과 탭으로 구분) 가 기본값입니다.bash
$1
arg
awk
선언된 변수 입니다${1:?}
첫 번째 매개변수입니다$1
. 배쉬를 사용하여매개변수 확장, 첫 번째 매개변수가 누락되면 오류가 발생합니다.${@:2}
$@
매개변수 목록입니다.${@:2}
동일하지만$1
첫 번째 매개변수가 이미 사용되었으므로 초 요소로 시작합니다.