안녕히 가세요!
쓰레기가 많이 표시되는 거대한 입력 파일이 있고 여러 하위 문자열을 내보내고 싶습니다. 문제는 때때로 추가 정보가 파일에 삽입되어 문자열에 점프하려는 데이터가 발생한다는 것입니다. 유일한 이점은 IP 주소가 항상 먼저 나온다는 것입니다. grep, sed 또는 awk를 사용하여 이를 수행할 수 있는 방법이 있습니까?
**Input file:**
Garbage ABC=10.100.100.100 Trash Unwanted DEF=1020 Crap
NotNeeded Disgard ABC=192.168.0.1 DEF=91 Garbage Trash
ABC=10.110.110.110 Garbage Trash NA Remove DEF=441
Garbage Crap Discard NotNeeded Trash
Unwanted Trash ABC=192.168.1.1 Unwanted DEF=12000 Nothing
**Desired output:**
ABC=10.100.100.100 DEF=1020
ABC=192.168.0.1 DEF=91
ABC=10.110.110.110 DEF=441
ABC=ABC=192.168.1.1 DEF=12000
도움을 주셔서 미리 감사드립니다.
답변1
GNU를 사용하면 정규식을 awk
사용하여 일치시킬 필드를 정의할 수 있습니다 .FPAT
awk -v FPAT='[A-Z]+=[0-9.]+' '
{ for (i=1;i<=NF;i++) printf "%s", $i (i==NF ? ORS : OFS) }
' file
[A-Z]+
AZ 내에서 하나 이상의 문자와 일치=
텍스트 일치=
[0-9.]+
하나 이상의 숫자와 점 일치
그러면 일치하는 필드를 반복하고 OFS
공백 문자( )를 구분 기호로 사용하여 각 필드를 인쇄합니다. 마지막 필드만 NF
개행 문자( )로 구분됩니다 ORS
.
산출:
ABC=10.100.100.100 DEF=1020
ABC=192.168.0.1 DEF=91
ABC=10.110.110.110 DEF=441
ABC=192.168.1.1 DEF=12000