grep/awk가 예상 결과를 반환하지 않았습니다.

grep/awk가 예상 결과를 반환하지 않았습니다.

다음 스크립트를 작성하고 이름을 지정 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 '^TEST ' file
TEST      RETAIL       RETAILTESTNode 
TEST       AUDIT       AUDITTESTNode

그리고:

$ 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/binPATH
  • 스크립트의 기능을 좀 더 설명하는 이름으로 이름을 지정하는 것이 좋습니다.

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 argawk내부적으로 변수를 전달하는 방법이 있나요 ?
  • $1첫 번째 인수와 혼동하지 awk않도록 첫 번째 필드(공백과 탭으로 구분) 가 기본값입니다.bash $1
  • argawk선언된 변수 입니다
  • ${1:?}첫 번째 매개변수입니다 $1. 배쉬를 사용하여매개변수 확장, 첫 번째 매개변수가 누락되면 오류가 발생합니다.
  • ${@:2} $@매개변수 목록입니다. ${@:2}동일하지만 $1첫 번째 매개변수가 이미 사용되었으므로 초 요소로 시작합니다.

관련 정보