unix .csv 파일에서 모든 유형의 특수 문자 제거

unix .csv 파일에서 모든 유형의 특수 문자 제거

다음과 같이 특수 문자가 포함된 소스에서 대규모 CSV 데이터 스트림을 처리하고 있습니다.

`÷ Þ Ÿ ³ Ù ÷`

다음은 다음 문자가 포함된 데이터세트의 샘플 행입니다.

'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'

다음은 다른 데이터세트에서 가져온 또 다른 예입니다.

WCP16,2013-06-04 20:06:24,2013-06-04,CPU,PrimeNumberGenerationTest,PASS,USA,H‌​F0SXV1,,,N,9999
WCP06,2013-06-04 20:06:24,2013-06-04,CPU,RegisterTest,PASS,USA,HF0SXV1,,,N,99‌​99
WCD42,2013-06-04 20:06:24,2013-06-04,DVDMINUSRW,MainICTest,PASS,USA,HF0SXV1,,‌​,N,9999
WCP09,2013-06-05 01:52:53,2013-06-05,CPU,SSE3Test,PASS,,?÷ÞQ»,,,N,9999
WCP10,2013-06-05 01:52:53,2013-06-05,CPU,SSE4_1Test,PASS,,?÷ÞQ»,,,N,9999

어떤 캐릭터가 나올지 안다면 대처할 수 있어요정보학파일을 읽을 때.

하지만 내 경우에는 특정 날짜에 어떤 유형의 데이터를 얻게 될지 확신할 수 없어서 작업이 실패합니다. 따라서 데이터에서 모든 특수 문자를 제거하는 방법이 필요합니다.

답변1

"특수 문자"가 정확히 무엇을 의미하는지 잘 모르겠습니다. 따라서 특수 문자를 제거하고 싶다고 가정합니다.ASCII 코드수치. 귀하에게 도움이 될 수 있는 몇 가지 도구가 있습니다. 가장 먼저 떠오르는 몇 가지는 다음과 같습니다.

  1. iconv(국제전환)
  2. tr(번역하다)
  3. sed(스트림 편집기)

iconv(국제전환)

다음은 다음을 사용하는 솔루션입니다.:

iconv -c -f utf-8 -t ascii input_file.csv

배너 -f(~에서)는 입력 형식, -t플래그(도착하다)는 출력 형식을 지정하며, 이 -c플래그는 iconv대상으로 변환할 수 없는 문자가 삭제됨을 나타냅니다. 그러면 결과가 표준 출력(예: 콘솔)에 기록됩니다. 결과를 새 파일에 쓰려면 다음을 수행하십시오.

iconv -c -f utf-8 -t ascii input_file.csv -o output_file.csv

그런 다음 필요한 경우 원본 파일을 새 파일로 바꿀 수 있습니다.

mv -i output_file.csv input_file.csv

iconv첫 번째 예제 문자열을 처리하는 방법은 다음과 같습니다 .

$ echo "'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'" | iconv -c -f utf8 -t ascii
'W' , '', ''

tr(번역하다)

다음은 다음을 사용하는 솔루션입니다.tr (번역)주문하다:

cat input_file.csv | tr -cd '\000-\177'

\000-\177모드는 지정된 숫자 범위 0-127을 사용합니다.8진수상징. ASCII 문자의 값 범위입니다. 이 플래그는 이 범위의 값이 보수에서 일치함(즉, ASCII가 아닌 문자가 일치함)을 -c나타내고 , 이 플래그는 번역이 아닌 삭제가 수행됨을 나타냅니다.tr-dtr

결과를 파일에 쓰려면 다음을 사용할 수 있습니다.출력 리디렉션:

cat input_file.csv | tr -cd '\000-\177' > output_file.csv

tr첫 번째 예제 문자열을 처리하는 방법은 다음과 같습니다 .

$ echo "'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'" | tr -cd '\000-\177'
'W' , '', ''

sed(스트림 편집기)

다음은 다음을 사용하는 솔루션입니다.sed:

sed 's/[\d128-\d255]//g' input_file.csv

접두사는 수행할 교체를 s나타내고 , 접미사는 전역 일치 패턴(기본적으로 첫 번째 일치만 일치)을 나타내며, 패턴은 128-255 범위의 10진수 값을 갖는 문자(예: 비ASCII 문자)에 대한 일치를 나타냅니다 . ), 두 번째와 세 번째 슬래시 사이의 빈 문자열은 일치하는 패턴을 빈 문자열로 대체(즉, 제거)하라는 의미입니다.sedgsed[\d128-\d255]sedsed

다른 많은 프로그램과 달리 sed(수동으로 다른 파일에 쓴 다음 원본 파일을 바꾸는 대신) 파일을 제자리에서 업데이트할 수 있는 옵션이 있습니다.

sed -i 's/[\d128-\d255]//g' input_file.csv

sed첫 번째 예제 문자열을 처리하는 방법은 다음과 같습니다 .

$ echo "'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'" | sed 's/[\d128-\d255]//g'
'W' , '', ''

관련 정보