awk가 실수로 쉼표를 제거했습니다.

awk가 실수로 쉼표를 제거했습니다.

텍스트 파일의 데이터를 조작하기 위해 다음 데이터 구조를 사용하고 있습니다.

"1111","2222","3333","4444","5555","6666","7777","2017/12/15 16:26:00"

날짜의 "/"를 "-"로 변경하려고 합니다. 이것은 내 awk 명령입니다.

awk -F "," '{gsub("/", "-", $8); print}' my-input.txt

/를 성공적으로 변경했지만 ',' 쉼표를 ' ' 공백 문자로 바꾸는 의도하지 않은 결과가 발생합니다.

"1111" "2222" "3333" "4444" "5555" "6666" "7777" "2017-12-15 16:26:00"

왜 이런 일이 일어나는지 아는 사람이 있나요?

답변1

taliezin과 pfnuesel이 지적했듯이 입력 파일 구분 기호를 ","로 정의할 때 출력 파일 구분 기호도 ","로 정의해야 이를 보존할 수 있습니다. 출력 파일 구분 기호가 생략되고 기존 필드가 수정된 경우 awk는 기본값(이 경우 ' ' [공백] 문자)을 사용합니다.

다음은 수정된 awk 명령입니다.

awk -F "," -v OFS="," '{gsub("/", "-", $8); print}' my-input.txt

","를 유지하면 예상되는 결과가 출력됩니다.

"1111","2222","3333","4444","5555","6666","7777","2017-12-15 16:26:00"

답변2

요구 사항은 "날짜의 '/'를 '-'로 변경"하는 것이므로 간단한 문자 교체이므로 sed를 사용하는 것은 어떨까요? sed 's///-/g' my-input.txt

관련 정보