今天遇到一个棘手的问题。。。

2022-08-22 10:32:39 浏览数 (1)

今天遇到一个棘手的问题,对端平台推送过来的数据有问题导致数据无法正常集成,由于是周六,期待对方整改基本没戏,咋办嘞,只能自己手工处理了。

问题描述

有个几十万行的数据,存在异常的行(某数值列,列值大于1000,属于异常值),但是行号是随机分布的,没有规律,不能直接使用 sed 删除。

处理方案

使用 awk 命令已经找到了异常的数据行,但是搜索了好久也找不到 awksed 结合使用的方法,遂放弃。

想要删除这些异常数据,sed 是肯定要用的,现在异常数据行随机分布,能不能让它集中到一块呢?排序行不行?搜索了一下,还真能排序,只不过排序结果只是显示结果,遂将排序结果存入新文件

先按照异常值列排序

sort -t '|' -k 3rn,3 file.txt > file2.txt

如上代码按照第三列倒序排序,正序排序是 -k 3n,3 这样的。

删除异常数据行

sed -i '1,176d' file2.txt

然而,删除后发现表头没了,表头去哪儿了呢,vi 打开文件查看,发现表头被排序到了末尾行,只能再想办法处理了。

想到的方法是拼接,把 file.txt 的表头和 file2.txt 的数据行进行拼接。

数据拼接

  • 获取表头,写入新文件:

cat file.txt |head -1 > file3.txt

  • 打开已排序文件,删除表头。

vi file2.txt 打开该文件,键盘输入 GG 光标移动到末尾行,输入 dd 删除末尾行 ,输入 :wq! 退出并保存

  • 将数据行追加到新文件 file3.txt

cat file2.txt >> file3.txt

至此,file3.txt 就是删除了异常数据行的新文件了,问题搞定。

0 人点赞