특정 열을 수정하려면 sed 또는 awk를 사용하세요.

특정 열을 수정하려면 sed 또는 awk를 사용하세요.

다음과 같은 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

데이터가 변경되면 정규식을 더 강력하게 변경해야 합니다.

관련 정보