Bash에서 awk 및 sed 명령을 결합하는 방법

Bash에서 awk 및 sed 명령을 결합하는 방법

Rev_ration 및 sync라는 세 개의 필드 이름이 있는 파일이 있습니다. 여기서는 (콜론으로 구분) 다음과 같습니다.

##Increase 
JOe:4.8:7

##Check as per revision 67
jonny:[5:9]:[7:0]
##Check as per revision 56
Salman:q[0:234]:5

처음에는 대괄호 안의 :를 !로 바꿨습니다. 두 번째로 AWK를 실행합니다. 셋째, 교체하고 싶다! 대괄호 안에 있습니다. 아래 코드를 시도하고 있습니다.

#!/bin/bash
sed 's/\([[0-9]\+\)!\([0-9]\+]\)/\1:\2/g' t5 >> t6
awk -F: '/^$/ /^#/ {c=$0; sub(/#+/,"", c); next} 
                {print $1,$2,"- message", "\"" c "\""}' t6 >> t7
sed 's/\([[0-9]\+\)!\([0-9]\+]\)/\1:\2/g' t7 >> t8

Getting syntax error

위 코드는 잘 작동하지만 빈 줄을 무시할 수는 없습니다.

입력 파일에서 빈 줄을 제거해야 합니다.

원하는 출력

JOe:4.8:7 - message "Increase "
jonny:[5:9]:[7:0] - message "Check as per revision 67"
Salman:q[0:234]: - message "Check as per revision 56"

세 가지 명령을 모두 결합하는 방법과 빈 줄을 제거하는 방법.. 위에 표시된 코드를 사용하여 문제를 해결하는 방법

답변1

-로 구분된 필드를 사용 하여 실제로 아무 작업도 수행하지 않는 것 같으므로 :로 시작하는 줄에 집중하여 ##해당 줄에서 텍스트를 선택하고 다음 줄에 텍스트를 삽입할 수 있습니다.

다음만 사용하세요 sed:

$ sed '/^$/d; /^##/{ s///; h; d; }; G; s/\n\(.*\)/ - message "\1"/' file
JOe:4.8:7 - message "Increase "
jonny:[5:9]:[7:0] - message "Check as per revision 67"
Salman:q[0:234]:5 - message "Check as per revision 56"

이 표현식은 다음을 사용하여 sed빈 줄을 제거합니다 . /^$/d그런 다음 그 뒤에 오는 모든 텍스트를 ##예약된 공간에 저장합니다( h초기 공간을 삭제한 후 ##예약된 공간에 저장되었을 수 있는 모든 내용을 대체 ). 공백이 아닌 다른 줄이나 로 시작하는 줄의 경우 ##예약된 공간에 텍스트를 추가 G하고 추가된 텍스트 앞에 가 붙고 - message "로 끝나도록 수정합니다 ".

관련 정보