dee*_*puu 4 special-characters escape-characters
我正在处理来自包含特殊字符的源的大量 CSV 数据流,例如:
`÷ Þ Ÿ ³ Ù ÷`
Run Code Online (Sandbox Code Playgroud)
以下是包含这些字符的数据集中的示例行:
'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'
Run Code Online (Sandbox Code Playgroud)
这是另一个取自不同数据集的示例:
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
Run Code Online (Sandbox Code Playgroud)
如果我知道期望什么类型的字符,那么我可以在读取文件时在Informatica 中处理它。
但在我的情况下,我不确定在任何一天我会得到什么类型的数据,因此我的工作失败了。所以我需要一种方法来从数据中删除所有特殊字符。
我不确定您所说的“特殊字符”到底是什么意思,所以我假设您想去掉非ASCII字符。有几种不同的工具可能适合您。我想到的前几个是:
iconv (国际化转换)tr (翻译)sed (流编辑器)iconv (国际化转换)这是使用iconv的解决方案:
iconv -c -f utf-8 -t ascii input_file.csv
Run Code Online (Sandbox Code Playgroud)
的-f(标志从)指定的输入格式,所述-t标志(到)指定的输出格式,并且将-c标志告诉iconv丢弃字符不能被转换为目标。这会将结果写入标准输出(即您的控制台)。如果要将结果写入新文件,则可以执行以下操作:
iconv -c -f utf-8 -t ascii input_file.csv -o output_file.csv
Run Code Online (Sandbox Code Playgroud)
然后,如果需要,您可以用新文件替换原始文件:
mv -i output_file.csv input_file.csv
Run Code Online (Sandbox Code Playgroud)
以下是如何iconv处理您的第一个示例字符串:
$ echo "'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'" | iconv -c -f utf8 -t ascii
'W' , '', ''
Run Code Online (Sandbox Code Playgroud)
tr (翻译)这是使用tr (translate)命令的解决方案:
cat input_file.csv | tr -cd '\000-\177'
Run Code Online (Sandbox Code Playgroud)
该\000-\177模式使用八进制表示法指定数字范围 0-127 。这是 ASCII 字符的值范围。该-c标志告诉tr在此范围的互补匹配值(即匹配非ASCII字符)和-d标志告诉tr执行删除(而不是翻译)。
要将结果写入文件,您将使用输出重定向:
cat input_file.csv | tr -cd '\000-\177' > output_file.csv
Run Code Online (Sandbox Code Playgroud)
以下是如何tr处理您的第一个示例字符串:
$ echo "'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'" | tr -cd '\000-\177'
'W' , '', ''
Run Code Online (Sandbox Code Playgroud)
sed (流编辑器)这是使用sed的解决方案:
sed 's/[\d128-\d255]//g' input_file.csv
Run Code Online (Sandbox Code Playgroud)
的s前缀告诉sed执行替换,所述g后缀告诉sed全局匹配的模式(默认情况下仅第一次出现的匹配),则图案[\d128-\d255]告诉sed以配合在范围128-255十进制值字符(即非ASCII字符),并且第二个和第三个正斜杠之间的空字符串告诉sed用空字符串替换匹配的模式(即删除它们)。
与许多其他程序不同,sed可以选择就地更新文件(而不是手动写入不同的文件然后替换原始文件):
sed -i 's/[\d128-\d255]//g' input_file.csv
Run Code Online (Sandbox Code Playgroud)
以下是如何sed处理您的第一个示例字符串:
$ echo "'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'" | sed 's/[\d128-\d255]//g'
'W' , '', ''
Run Code Online (Sandbox Code Playgroud)