CSV 파일의 공백과 빈 셀 바꾸기

CSV 파일의 공백과 빈 셀 바꾸기

7개의 열이 있는 csv 파일이 있습니다. 빈 셀과 셀 사이에 약간의 공백이 있습니다. 빈 셀을 NA로 바꾸고 추가 공백을 제거하려면 어떻게 해야 합니까? 매우 감사합니다!

내 파일의 모양은 다음과 같습니다. 하지만 복사하여 붙여넣을 때 이리저리 움직이는 것 같습니다.

130070078,PPW0001,1,4,4HW             ,2,15.61943874
120040039,PPW0002,0,0,                ,0,0
120040043,PPW0003,1,3,3WE             ,1,14.43394935

답변1

너의 답:

sed 's/ *,/,/g' file1 | sed 's/,,/,NA,/g' > file2

비어 있는 경우 마지막 필드에 'NA'를 얻으려면 다음을 수행하십시오.

sed 's/ *,/,/g' file1 | sed 's/,,/,NA,/g' | awk -F, 'OFS="," {if ($NF == "") $NF = "NA"; print}'> file2

다음을 사용할 수도 있습니다.

sed 's/,,/,NA,/g' file1 | tr -d ' ' | awk -F, 'OFS="," {if ($NF == "") $NF = "NA"; print}'

답변2

αғsнιе의 답변은 저에게 효과적이었지만 조금 설명하고 싶습니다.

나는 다음과 같은 것을 시도하고있었습니다.

echo "1,,2,,,3,,,4,,,,5,,,,,,,,,,6" | sed 's/,,/,-,/g'

어느 출력

1,-,2,-,,3,-,,4,-,,-,5,-,,-,,-,,-,,-,6

반복되는 빈 필드로 인해 마지막 쉼표는 첫 번째 교체의 일부이고 다음 원하는 교체의 시작이므로 매 두 번째 빈 필드가 교체됩니다.

이제 다음과 같은 작업을 수행할 수 있습니다.

echo "1,,2,,,3,,,4,,,,5,,,,,,,,,,6" | sed -e 's/,,/,-,/g' -e 's/,,/,-,/g'

또는

sed 's/,,/,-,/g;s/,,/,-,/g'

두 번째 명령은 누락된 셀을 가져오므로 모든 셀을 대체하지만 약간 지저분합니다.

αғsнιι의 명령은 레이블과 점프를 사용하여 본질적으로 동일한 작업을 수행하는데, 여러분이 할 수 있다는 것을 몰랐습니다.

sed ':MYLABEL; s/,,/,-,/g; t MYLABEL;'

산출:

1,-,2,-,-,3,-,-,4,-,-,-,5,-,-,-,-,-,-,-,-,-,6

따라서 명령의 첫 번째 부분은 레이블을 생성합니다.

그러면 우리는 같은 대체물을 갖게 됩니다.

그런 다음 이전 대체 명령이 성공하면 레이블로 점프하는 것을 의미하는 t 명령이 있습니다.

추가 정보:http://www.grymoire.com/Unix/Sed.html#uh-59

관련 정보