두 개의 반복 패턴에서 일치 항목을 검색하는 방법: mappedname
아래 텍스트의 값은 무엇입니까?
MapName:abc
someDiffName=someDiffValue
x=3
y=6
NeedyMappedName=NeedyMappedValue
.
.
Flag=true
grep "MapName\|NeedyMappedName" fileName
awk
출력 에서 실행 하면 grep
모든 행에 적용되므로 예상한 결과가 제공되지 않습니다.
내가 얻고 싶은 결과는
abc,NeedyMappedValue
'를 실행하면 grep "MapName\|NeedyMappedName" fileName
필요한 두 줄이 제공됩니다. awk -F ":" '{print $2}'
필요한 값을 추출하는 데 이를 사용할 때 필터링된 grep 출력에서 두 번째 필수 일치 항목을 추출 abc
할 수 없습니다 . 두 번째 행에서 다른 패턴으로 패턴을 실행하여 이를 달성할 NeedyMappedValue
수 있는 방법이 있습니까 ?awk
답변1
나는 이것이 당신이 기대하는 것이라고 생각합니다 :
grep "MapName\|NeedyMappedName" fileName | awk -F: '
/MapName/ {printf "%s,",$2}
/NeedyMappedName/ {gsub("NeedyMappedName=","");printf "%s\n",$1}'
편집: 불필요한 grep 제거(Craig Sanders 덕분에)
awk -F: '
/MapName/ {printf "%s,",$2}
/NeedyMappedName/ {gsub("NeedyMappedName=","");printf "%s\n",$1}' fileName
awk의 추가 사용(Solaris에서는 nawk):
awk FS=":|=" '
/MapName/ {printf "%s,",$2}
/NeedyMappedName/ {printf "%s\n",$2}' fileName