변수와 일치하고 출력을 제공하는 다음 스크립트를 실행하는 데 도움을 주십시오. 스크립트가 작동 중입니다.정밀한열 1과 2와 일치하지만,부분의성냥.
cat ~/bin/MYSH
#!/bin/bash
arg="${1:?}"
awk -v arg="${arg//\\/\\\\}" '$1 == arg || $2 == arg' "$@" inputfile
입력 파일-
1111 1111RETAIL RETAIL8888Node
2222 2222RETAIL RETAIL7777Node
3333 3333AUDITTEST AUDIT6666Node
4444 4444AUDIT AUDIT3333Node
5555 5555SALE SALE4444Node
6666 6666SALE SALE2222Node
7777 7777FINANCE FINANCE1111Node
8888 8888FINANCE FINANCE5555Node
스크립트는 아래와 같이 열 1 또는 2에 입력된 단어와 정확히 일치하는 항목을 검색하여 출력을 제공합니다.
$ MYSH 6666
6666 6666SALE SALE2222Node
$ MYSH 4444AUDIT
4444 4444AUDIT AUDIT3333Node
또한 아래와 같이 열 2에 2~3개 또는 일치하는 문자가 있는 경우 출력을 제공하려면 이 스크립트가 필요합니다.
예상 출력 -
$ MYSH 4444AU
4444 4444AUDIT AUDIT3333Node
또는
MYSH 7777FINAN
7777 7777FINANCE FINANCE1111Node
답변1
테스트 $1 == arg
는진짜arg
첫 번째 필드의 값이 변수와 동일한 경우. 값이 의 arg
어딘가에서 찾을 수 있는지 테스트하려면 $1
이 함수를 사용할 수 있습니다 index()
. 이 함수는 하위 문자열이 발견된 위치를 반환하거나, 발견되지 않은 경우 0을 반환합니다.
#!/bin/sh
arg=${1:?} awk 'index($1,ENVIRON["arg"]) || index($2,ENVIRON["arg"])' inputfile
필드 시작 부분에서만 하위 문자열이 일치하도록 하려면 index()
함수의 반환 값이 1인지 확인하세요.
#!/bin/sh
arg=${1:?} awk 'index($1,ENVIRON["arg"])==1 || index($2,ENVIRON["arg"])==1' inputfile
또한 스크립트의 첫 번째 인수를 awk
환경 변수로 명령에 전달하여 백슬래시를 이중 슬래시로 변경하지 않고도 사용할 수 있도록 했습니다.
하나할 수 있다$1 ~ ENVIRON["arg"]
사용자 제공 값을 첫 번째 필드 값에 대한 정규식으로 사용하여 정규식 일치를 수행하는 사용 (또는 $1 ~ "^" ENVIRON["arg"]
처음에만 일치) 도 가능합니다 . 그러나 이는 사용자가 자신이 제공하고 있다는 것을 알지 않는 한 부적절합니다.정규식문자열보다는.