如图所示,我要在类似的数据上进行数据处理,剔除前面的 60832 列数据, 然后后面框中数据要切割三段进行收集(这个好处理,按长度切割就可以),但是后面的数据有的后面带空格(如箭头所示)。
现在我的思路是按照数据位置切割(即利用 UltraEdit 的列模式进行区域选择) 但是文本文件数据很大,处理起来 这个不是上上策。。
现在想用 ETL kettle 抽取(朋友推荐的),但是我从未使用过此软件,研究良久没有发现我想要的功能。虽然这个软件真的很强大。
考虑过正则,但是数据并不是特别规则,我写不出来。
总结起来问题就下面三点。
1
noqwerty 2018-07-16 10:09:36 +08:00 1
感觉两列之间空格数比较多?可以先正则"/\s{15,1000}/,/",然后把逗号作为分隔符分列后处理就行了,pandas 或者随便其他什么库应该都很方便。
|
2
qinrui 2018-07-16 10:16:04 +08:00 via iPhone
awk 了解一下
|
3
linuxsteam OP @noqwerty 多谢开窍,我再研究研究怎么只替换空格 保留换行符
|
4
noqwerty 2018-07-16 10:35:17 +08:00 via Android
@linuxsteam 2 楼说的 awk 干这个应该很方便,但是我不会…… sed 应该也可以,总之能干活就行,多写几行少写几行的事。
|
5
linuxsteam OP @noqwerty 嘻嘻 我用 sublime 弄的, kettle 支持正则匹配 但是能不能处理 再研究,就是总多替换多一个空格很难受
|
6
linuxsteam OP 多替换出来一个逗号,不是空格。。
|
7
ynyounuo 2018-07-16 10:56:59 +08:00 via iPhone
按长度来,如果你用 Sublime Text 直接 Ctrl + Shift + L 不就好啦?
|
8
iango 2018-07-16 11:12:13 +08:00
excel 分列?新版能处理 1048576 行。如果不会编程语言,感觉这个最简单了。
如果用文本编辑器,正则最方便。 |
9
dexterzzz 2018-07-16 11:16:48 +08:00
power query
|
10
sunnyadamm 2018-07-16 12:00:41 +08:00
awk,python,excel 等等,能处理的太多了,稍稍自己研究一下切割就 OK 了
|
11
linuxsteam OP @iango 我会点正则,数据分分钟超过 300w 行
|
12
imn1 2018-07-16 13:01:51 +08:00
300w,没哪个 GUI 能一次搞定,CLI 吧
按行读取,分割字串,入库 |
13
princelai 2018-07-16 13:02:17 +08:00
```
cat tmp.txt 60801 201805316549884131316646111 60802 20180531564897132123131 11 60803 20180531897611346504861 11 60804 201805310021654812056115611 ``` ``` cat tmp.txt | awk -F'\\s{5,}' '{print $2}' 201805316549884131316646111 20180531564897132123131 11 20180531897611346504861 11 201805310021654812056115611 ``` 5 只要大于后面的空格数的任意数字就可以,python 就不给你谢了,反正都是正则表达式 |
14
princelai 2018-07-16 13:25:32 +08:00 1
没看清你是要再次分割后面,你试试下面这段
``` cat tmp.txt | awk -v OFS='\t' -F'\\s{5,}' '{split($0,a)};{print substr(a[2],1,8),substr(a[2],9,10),substr(a[2],19,length(a[2]))}' 20180531 6549884131 316646111 20180531 5648971321 23131 11 20180531 8976113465 04861 11 20180531 0021654812 056115611 ``` |