awk 및 sed는 각 관련 줄의 줄 끝을 추가합니다.

awk 및 sed는 각 관련 줄의 줄 끝을 추가합니다.

줄을 조작하고 싶지만 한 줄씩 처리하는 데 갇혀 있습니다. 내 파일은 다음과 같습니다.

10.10.10.10 ABtest
10.10.10.11 ABprod

줄 끝의 문자열에 따라 각 줄에 문자열을 추가하고 싶습니다.

ABtest내 접근 방식은 줄 끝의 문자열을 테스트하기 위해 awk를 사용한 다음 sed를 사용하여 에서 ABtest로 변환합니다. test그런 다음 각 관련 줄에 출력을 추가하고 싶습니다.

다음과 같이 출력하고 싶습니다.

10.10.10.10 ABtest test
10.10.10.11 ABprod prod

답변1

둘 다 필요하지 않으며 sed하나 awk의 도구로 갈 수 있습니다. 목표를 달성하는 코드는 awk다음과 같습니다.

awk ' 
/AB/ { 
        printf $0
        gsub("^AB", "", $2)
        printf " %s\n", $2
     }
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
EOT

/<expression>/정규식을 검색하면 그 {<code>}부분이 해당 레코드로 무엇을 해야 할지 알려줍니다. 이 특별한 경우에 함수는 gsub두 번째 열에 있는 'AB'의 모든 모양을 대체합니다. 첫 번째 모양을 사용하고 싶지만 sub()정규식에 관해서는 여기에서 동일한 결과로 둘 중 하나를 사용할 수 있다고 생각합니다. 이어서 인쇄됩니다.

변경되지 않고 인쇄되도록 편집할 줄 사이에 줄이 있는지 질문에서 명확하지 않습니다. 이 경우 다음과 같이 일치 및 편집 후 다음 레코드로 이동해야 합니다.

awk '
/AB/ { printf $0; gsub("^AB", "", $2); printf " $2\n"; next; }
{ print $0 }
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
testtesttets
EOT

를 사용하여 더욱 구체적인 테스트를 만들어야 할 수도 있습니다 if. 몇 가지 awk 리소스를 살펴보시기를 강력히 권장합니다(여기또는여기예를 들어)

관련 정보