단어 수를 세고 주어진 패턴과 정확히 일치하는 줄을 인쇄하는 방법은 무엇입니까?

단어 수를 세고 주어진 패턴과 정확히 일치하는 줄을 인쇄하는 방법은 무엇입니까?

단어 수를 세고 다음 패턴과 정확히 일치하는 패턴 행을 인쇄하고 싶습니다.

abc-ERROR:

입력 파일에는 다음이 포함됩니다.

# abc-ERROR: xyxxkkfgfr
# def-Error: aaaaaa
# abc-ERROR.cpp

출력은 다음과 같아야 합니다.

 1   (count)
 # abc-ERROR: xyxxkkfgfr   (line)

답변1

grep를 사용하여 행 수와 행 수를 얻을 수 있습니다 grep -c. 두 번 실행하는 것을 좋아하지 않으면 대체를 grep사용하고 처리할 수 있습니다 tee(여기에 bash 구문이 있습니다).

grep abc-ERROR: input.txt | tee >( wc -l )

답변2

이건 어때:

$ cat file
# abc-ERROR: xyxxkkfgfr
# abc-ERROR: xyxxkkfgfr
# abc-ERROR: xyxxkkfgfr
# def-Error: aaaaaa
# abc-ERROR.cp
# abc-ERROR: asdgsdgaaf
# abc-ERROR: asdgsdgaaf
# abc-ERROR: tttttttttq

$ awk '/abc-ERROR: /{a[$0]++}END{for(k in a) printf "%d\t(count)\n%s\t(line)\n",a[k],k}' file
1   (count)
# abc-ERROR: tttttttttq (line)
2   (count)
# abc-ERROR: asdgsdgaaf (line)
3   (count)
# abc-ERROR: xyxxkkfgfr (line)

답변3

나는 이 문제를 해결하기 위해 두 가지 접근 방식을 제안합니다.

1) bashrc/bash_profile에 함수를 배치하고 함수를 호출하는 별칭을 만듭니다(이 함수는 전역적으로 사용됩니다).

2) 쉘 스크립트 파일을 생성하거나 파일의 별칭을 생성할 수 있습니다.

#!/bin/bash
function matchString(){
REGEX="$1"
FILE="$2"
RESULTS=$(grep -n "$REGEX" $FILE | awk -F ":" '{print $2 "\tLine: " $1}')
COUNT=$(echo $RESULTS | wc -l)
echo "Count: $COUNT"
echo $RESULTS
}
matchString $1 $2

텍스트 파일(예: bash matchString.sh "abc-ERROR:" test.txt)에 대해 이를 호출하면 다음이 출력됩니다.

수량: 1

abc - 오류 줄: 1

--이 함수는 첫 번째 인수를 정규식 패턴으로 사용하여(비슷한 시나리오에서 재사용 가능) 해당 패턴에 대한 두 번째 인수로 호출된 파일을 검색합니다.

출력의 첫 번째 줄은 일치하는 모든 줄의 총 개수이고, 이후의 각 줄은 일치 항목이며, 그 뒤에는 해당 일치 항목의 줄 번호를 나타내는 탭 문자가 옵니다.

관련 정보