하나의 명령으로 여러 입력 [닫기]

하나의 명령으로 여러 입력 [닫기]

나는 다음과 같은 것을 가지고 있습니다 :

Error_code=1; num=5;
Error_code=2; num=7;
Error_code=3; num=9;
Error_code=1; num=2;
Error_code=2; num=5;

. . .

에러코드도 많네요(약 100개). 파일 이름이 다음과 같다고 가정합니다.performance.log

명령을 사용하는 방법? 오류코드는 매번 다릅니다. 나는 다음과 같은 것을 가지고 있습니다 :

grep -i "error_code=$x;" performance.log | \
   awk -F";" '{print $2}' > $x_error_code.txt

따라서 매번 변수는 x오류 코드를 기반으로 정의된 새로운 값이며, 오류 코드가 완료되면 스크립트가 완료됩니다.

답변1

스크립트 awk는 모든 것을 할 수 있습니다. 이는 다음과 같이 순수 Bourne 쉘 스크립트를 사용하여 수행할 수도 있습니다.

grep -E -o '[[:digit:]]+; num=[^;]+' performance.log \
| while IFS="; " read n num; do
    echo "$num" >> "${n}_error_code.txt"
done

이 부분은 " " 줄에서 grep하위 문자열 " "을 추출합니다 . while 루프는 후자를 읽고 씁니다.EEE; num=NNNError_code=EEE; num=NNN;EEEnum=NNNEEE_error_code.txt

하나의 특정 오류 코드(아래 EEE)에만 관심이 있는 경우 명령을 다음 grep과 같이 변경할 수 있습니다.

grep -E -o '\<EEE; num=[^;]+' performance.log | while ...

작은 오류 코드 세트(아래 EEE1...EEEn)에 관심이 있는 경우 명령을 grep다음과 같이 변경할 수 있습니다.

grep -E -o '\<(EEE1|EEE2|...|EEEn); num=[^;]+' performance.log | while ...

답변2

sed -n "/Error_code=$x/s/^[^ ]* //p" > $x_error_code.txt

답변3

저는 단지 awk를 사용하여 이를 수행할 것입니다.

파일을 검사하고 각 오류 유형에 대해 하나의 파일을 생성합니다.

$ ex="";awk -F"[;=]" -v ex=$ex '{a[$2]=a[$2] "\n" $3"="$4}END{for (k in a) if (k!~ex || ex=="") print a[k] >k"error_code.txt"}' performance.log

일부 오류를 "제외"하려면 그에 따라 쉘 변수 ex의 값을 조정할 수 있습니다 ex="2|3"(예: 2 또는 3 제외).

시험:

$ echo "$c"
Error_code=1; num=5;
Error_code=2; num=7;
Error_code=3; num=9;
Error_code=1; num=2;
Error_code=22; num=5;

$ ex="";echo "$c" |awk -F"[;=]" -v ex=$ex '{a[$2]=a[$2] "\n" $3"="$4}END{for (k in a) if (k!~ex || ex=="") print a[k],k}'
 num=5
 num=2 1

 num=7 2

 num=9 3

 num=5 22

$ ex="22|1";echo "$c" |awk -F"[;=]" -v ex=$ex '{a[$2]=a[$2] "\n" $3"="$4}END{for (k in a) if (k!~ex || ex=="") print a[k],k}'

 num=7 2

 num=9 3

반면, 특정 패턴을 제외하지 않고 일치시키려는 경우 다음을 수행할 수 있습니다.

$ inc="1";awk -F"[;=]" -v inc=$inc '{a[$2]=a[$2] "\n" $3"="$4}END{for (k in a) if (k~inc || inc=="") print a[k] >k"error_code.txt"}' performance.log 

inc인쇄하려는 오류 코드를 var(포함)에 적용하거나, 모든 오류를 포함하려면 공백으로 남겨두세요. ( inc="")

관련 정보