특정 필드의 특수 문자를 바꾸는 방법은 무엇입니까?
입력하다
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의 각 하위 문자열에 대해t
string을 바꾸고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