![awk 및 sed는 각 관련 줄의 줄 끝을 추가합니다.](https://rvso.com/image/1592566/awk%20%EB%B0%8F%20sed%EB%8A%94%20%EA%B0%81%20%EA%B4%80%EB%A0%A8%20%EC%A4%84%EC%9D%98%20%EC%A4%84%20%EB%81%9D%EC%9D%84%20%EC%B6%94%EA%B0%80%ED%95%A9%EB%8B%88%EB%8B%A4..png)
줄을 조작하고 싶지만 한 줄씩 처리하는 데 갇혀 있습니다. 내 파일은 다음과 같습니다.
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 리소스를 살펴보시기를 강력히 권장합니다(여기또는여기예를 들어)