我有一个包含文本和数字的csv文件。
如果一个数字大于1000,格式如下:1000,所以它有一个作为千分隔符的空间,但它不是空间。我试着sed
它,它在真实空间所在的地方工作,但不是这种格式。
它也不是TAB,我删除了所有带有";展开-t1";。
下面一行说明了这个问题:
x17_Provident_GDN_REMARKETING_provident.hu_listák;Display_Hálózat;Szeged;2021-03-09;Kedd;Mobil;HUF;1 736;9;130.83;0.00
倒数第二行,第8列:1 736
就是问题所在。
运行这个:grep -E -m 1 -e '[;]1[^;]+736[;]' <yourfile.csv | hexdump -C
给出:
00000000 78 31 37 5f 50 72 6f 76 69 64 65 6e 74 5f 47 44 |x17_Provident_GD|
00000010 4e 5f 52 45 4d 41 52 4b 45 54 49 4e 47 5f 70 72 |N_REMARKETING_pr|
00000020 6f 76 69 64 65 6e 74 2e 68 75 5f 6c 69 73 74 c3 |ovident.hu_list.|
00000030 a1 6b 3b 44 69 73 70 6c 61 79 5f 48 c3 a1 6c c3 |.k;Display_H..l.|
00000040 b3 7a 61 74 3b 53 7a 65 67 65 64 3b 32 30 32 31 |.zat;Szeged;2021|
00000050 2d 30 33 2d 30 39 3b 4b 65 64 64 3b 4d 6f 62 69 |-03-09;Kedd;Mobi|
00000060 6c 3b 48 55 46 3b 31 c2 a0 37 33 36 3b 39 3b 31 |l;HUF;1..736;9;1|
00000070 33 30 2e 38 33 3b 30 2e 30 30 0a |30.83;0.00.|
0000007b
这是一个2字节、UTF-8编码的非中断空间-c2 a0
。
您可以使用perl
来安全地移除它。
perl -pe 's/xc2xa0//g' dirty.csv > clean.csv
在我们知道它是无中断空间后,我简单地在mac上使用了输入方法:
opt+space
cat test4.csv | sed 's/ //g'
类似于perl,您可以将GNUsed
与LC_ALL=C
:一起使用
LC_ALL=C sed 's/xc2xa0//g'