다음과 같이 특수 문자가 포함된 소스에서 대규모 CSV 데이터 스트림을 처리하고 있습니다.
`÷ Þ Ÿ ³ Ù ÷`
다음은 다음 문자가 포함된 데이터세트의 샘플 행입니다.
'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'
다음은 다른 데이터세트에서 가져온 또 다른 예입니다.
WCP16,2013-06-04 20:06:24,2013-06-04,CPU,PrimeNumberGenerationTest,PASS,USA,HF0SXV1,,,N,9999
WCP06,2013-06-04 20:06:24,2013-06-04,CPU,RegisterTest,PASS,USA,HF0SXV1,,,N,9999
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 코드수치. 귀하에게 도움이 될 수 있는 몇 가지 도구가 있습니다. 가장 먼저 떠오르는 몇 가지는 다음과 같습니다.
iconv
(국제전환)tr
(번역하다)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
-d
tr
결과를 파일에 쓰려면 다음을 사용할 수 있습니다.출력 리디렉션:
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 문자)에 대한 일치를 나타냅니다 . ), 두 번째와 세 번째 슬래시 사이의 빈 문자열은 일치하는 패턴을 빈 문자열로 대체(즉, 제거)하라는 의미입니다.sed
g
sed
[\d128-\d255]
sed
sed
다른 많은 프로그램과 달리 sed
(수동으로 다른 파일에 쓴 다음 원본 파일을 바꾸는 대신) 파일을 제자리에서 업데이트할 수 있는 옵션이 있습니다.
sed -i 's/[\d128-\d255]//g' input_file.csv
sed
첫 번째 예제 문자열을 처리하는 방법은 다음과 같습니다 .
$ echo "'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'" | sed 's/[\d128-\d255]//g'
'W' , '', ''