【发布时间】:2018-05-06 12:53:30
【问题描述】:
我的数据应该是每行 30 列。导出没有完美执行,我偶尔会得到 32 - 50 列,因为字段本身有额外的制表符分隔符。
我还需要使用以下 sed 程序从数千个逗号中删除逗号。
sed '/[0-9],[0-9]./ {s/,//g; }' $oldfile > $newfile
那么如何转换以下数据,消除逗号并将额外的分隔符合并到最后一列
这是我的示例输入:
Column1 Column2 Column3
James 1,203.33 comment1
Mike -3,434.09 testing testing 123
Sarah 1,343,342.23 there here
我希望输出是:
Column 1 Column2 Column3
James 1203.33 comment1
Mike -3434.09 testing_tab_testing_tab_123
Sarah 1343342.23 there_tab_here
所以最后我需要删除逗号出现在数字中 我还想找到超过 3 个(或适当数量的选项卡)的行,然后 将三个之后的标签替换为 tab,以便在将它们上传到我的数据库后处理它们,所有内容都将在 3 列中。
我希望我可以在 sed(我是新手)或 awk(我根本不知道 awk)中执行此操作,因为 sed 处理所有这些的速度非常快。
编辑:这是最适合我的情况的方法
sed '/[0-9],[0-9]./ {s/,//g; };s/\t/_tab_/3g' input_file
首先它消除了两个数字之间的所有逗号。然后它在第三次出现后用“tab”替换我的标签。我会在工作中测试一下。
我不使用 perl 的原因是我对它的了解有限,这使我相信它需要将文档加载到内存中才能对其进行评估,并且这些文档的大小从 5gb 到 30gb 不等,这通常超出了我的计算机内存。
如果我在工作中使用它时出现任何问题,我会让你知道,但我非常感谢所有帮助。
【问题讨论】:
-
您的意思是说每列数据(
awk或perl称为“字段”)是 30 个字符宽吗?每行有 30 列是不同的。 -
它们应该有 30 列,但有时列中有额外的分隔符,当我尝试将它们上传到我的数据库时会导致问题。我正在尝试提前摆脱它们。