awk를 사용한 bash 스크립트

awk를 사용한 bash 스크립트

파일을 입력하고 파일을 읽고 루프에서 실행하는 bash 스크립트를 실행 중입니다. 내 문제는 내 awk 명령입니다. 왜 오류가 발생하는지 모르겠습니다.

스크립트를 실행하는 파일을 입력합니다.

./almost.sh < text.txt

스크립트는

#!/bin/bash

while read STRING
do
    echo $STRING
    "awk -v RS='' -v ORS='\n\n'  $STRING file.txt" >> out.txt 

     #grep $STRING dbutils.list.Volume.txt >> out.txt
done

내가 얻는 결과는 다음과 같습니다.

00061
./almost.sh: line 6: awk -v RS='' -v ORS='\n\n'  00061 list.txt: command not found
00062
./almost.sh: line 6: awk -v RS='' -v ORS='\n\n'  00062 list.txt: command not found
00091
./almost.sh: line 6: awk -v RS='' -v ORS='\n\n'  00091 list.txt: command not found
000C1
./almost.sh: line 6: awk -v RS='' -v ORS='\n\n'  000C1 list.txt: command not found
000C2
./almost.sh: line 6: awk -v RS='' -v ORS='\n\n'  000C2 list.txt: command not found

누구든지 awk 명령으로 나를 도와줄 수 있나요? 명령이 루프에 있지 않고 한 번만 실행되면 제대로 작동합니다.

답변1

명령이 없기 때문에 오류가 보고됩니다.

"awk -v RS='' -v ORS='\n\n'  $STRING file.txt"

awk와 해당 인수(의미 없음)는 큰따옴표 사이에 있으며, 쉘에 대한 조합은 명령이고, 쉘은 "awk -v RS='' -v ORS='\n\n'이라는 파일을 찾고 있습니다. $STRING 파일 .txt".

아마도 당신 말은

awk -v RS='' -v ORS='\n\n'  "/$STRING/" file.txt >> out.txt

답변2

더 이상 답변이 없으므로 전체 스크립트를 다음으로 간단히 대체할 수 있다고 제안합니다.

grep -F -f text.txt file.txt >out.txt

이는 text.txt에 대한 입력이 정규 표현식이 아니라 검사할 문자열이라고 가정합니다. 오류 메시지에서는 $STRING을 000.으로 바꾸라고 제안합니다. 따라서 -f는 파일에서 각 문자열을 읽고, -F는 문자열을 처리합니다. 일반 문자열로. file.txt와 일치하는 모든 항목은 out.txt로 전송됩니다.

아래 dave_thompson_085의 의견에 대한 응답으로, 알려진 구조를 가진 단락이 있는 경우 여전히 유용할 수 있습니다. 즉, 찾을 문자열이 각 단락의 특정 줄에 있고 -Band -A옵션을 사용하여 이전 줄을 인쇄할 수도 있습니다. 번호도 그렇고 뒷면도 그렇고.

관련 정보