다음과 같은 CSV 파일이 있습니다.
qw12er,foo,0 bn5mgh
rt8yp,foo,10 gh78jk
bn852mv,foo,852 78ghjkh
tgbr,foo,10 ujmyhn
wsx2d,foo,0000 ui52ohn
tgbr,foo,7418529 ujmyhn
ikl896o,foo,22 wsxdc52
세 번째 열을 수정하고 세 번째 열 시작 부분의 모든 숫자와 공백을 제거하고 싶습니다.
그러면 출력은 다음과 같습니다.
qw12er,foo,bn5mgh
rt8yp,foo,gh78jk
bn852mv,foo,78ghjkh
tgbr,foo,ujmyhn
wsx2d,foo,ui52ohn
tgbr,foo,ujmyhn
ikl896o,foo,wsxdc52
답변1
또 다른 해결책은 다음을 awk
사용하는 것 입니다.sub
:
awk -F, 'sub("^[0-9]+\\s","",$3)' OFS=, file
산출:
qw12er,foo,bn5mgh
rt8yp,foo,gh78jk
bn852mv,foo,78ghjkh
tgbr,foo,ujmyhn
wsx2d,foo,ui52ohn
tgbr,foo,ujmyhn
ikl896o,foo,wsxdc52
설명하다:
-F,
: 입력 필드 구분자로 쉼표를 설정합니다.OFS=,
: 출력 필드 구분 기호로 쉼표를 설정합니다(기본값은 공백).sub("^[0-9]+\\s","",$3)
: 문자열 시작 부분의 숫자와 공백을 제거$3
하고 현재 줄을 인쇄합니다( "인쇄"가 의 기본 동작이므로awk
).
이렇게 하면 원하는 열을 편집하고 다른 모든 열(종종 많을 수 있음)을 인쇄할 수 있습니다.
답변2
나는 다음을 사용했다 awk
:
awk -F"[ ,]" '{print $1","$2","$4 }' yourfile
결과:
qw12er,foo,bn5mgh
rt8yp,foo,gh78jk
bn852mv,foo,78ghjkh
tgbr,foo,ujmyhn
wsx2d,foo,ui52ohn
tgbr,foo,ujmyhn
ikl896o,foo,wsxdc52
답변3
존재하다 awk
:
awk '{FS="[, ]"; OFS=","; print $1, $2, $4}' filename
존재하다 sed
:
sed 's/^\(.*,\)[0-9]* \([^,]*\)$/\1\2/' filename
답변4
표시되는 데이터에 따라 다음과 같을 수 있습니다.sed
sed -r 's/,[0-9 ]+ /,/' file.csv
데이터가 변경되면 정규식을 더 강력하게 변경해야 합니다.