특정 필드의 특수 문자 바꾸기

특정 필드의 특수 문자 바꾸기

특정 필드의 특수 문자를 바꾸는 방법은 무엇입니까?

입력하다

xxxx,11/2019,xxx

산출

xxxx,11,2019,xxx

보시다시피 /in 으로 ,바꾸고 싶습니다 $2.

이 목표를 달성하는 방법은 무엇입니까?

답변1

awk -F, -v OFS=, '{gsub(/\//,",",$2); print}'

이는 전역 정규식 검색을 수행하고 필드 2를 바꾸는 awk함수를 사용합니다.gsub()

/$2의 첫 번째 항목 만 바꾸려면 sub()대신 을 사용하십시오 gsub().

참고: 기본 출력 필드 구분 기호 OFS는 공백입니다. 이를 ,(입력 필드 구분 기호와 동일 FS) 로 설정해야 합니다 . 그렇지 않으면 print공백으로 구분된 모든 필드가 출력됩니다.

GNU 매뉴얼 페이지에서 awk:

gsub(r, s [, t])

r정규식과 일치하는 string의 각 하위 문자열에 대해 tstring을 바꾸고 s대체 횟수를 반환합니다.

제공되지 않으면 t$0이 사용됩니다.

대체 텍스트는 &실제 일치하는 텍스트로 대체됩니다.

텍스트를 가져오는 데 사용됩니다 \&&. (다음과 같이 입력해야 합니다 \\&. 참조)GAWK: 효율적인 AWK 프로그래밍대체 텍스트의 & 및 백슬래시 규칙에 대한 보다 완전한 설명입니다 sub(). )gsub()gensub()

답변2

주어진 명령이전 답변훨씬 더 간단할 수 있습니다. 테스트를 거쳤으며 잘 작동합니다.

두 번째 열에도 변경이 필요했기 때문에 두 번째 열에도 같은 내용을 추가해서 테스트해봤습니다.

echo "echo "xxxx,11/2019,xxx xxxx,11/2019,xxx" " |
awk '{print gsub("/",",",$2);print $0}'  

산출:

xxxx,11/2019,xxx xxxx,11,2019,xxx

관련 정보