请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需要一步,快速开始

搜索
开启左侧

一篇文章告诉你如何用 grep/awk 做数据截断

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
221518ttlwrslzzi229wz2.jpg

Data

截断的数据项很难检测。在审核数据时,我使用三种不同的方法来查找可能的截断,但我依然可能会错过一些。
-- Polydesmida(作者)
截断(形容词):缩写、删节、缩减、剪切、剪裁、裁剪、修剪……
数据项被截断的一种情况是将其输入到数据库字段中,该字段的字符限制比数据项的长度要短。例如,字符串:
Yarrow Ravine Rattlesnake Habitat Area, 2 mi ENE of Yermo CA
是 60 个字符长。假如你将其输入到具有 50 个字符限制的“位置”字段,则可以获得:
Yarrow Ravine Rattlesnake Habitat Area, 2 mi ENE #末尾带有一个空格
截断也可能导致数据错误,比如你打算输入:
Sally Ann Hunter (aka Sally Cleveland)
但是你忘记了闭合的括号:
Sally Ann Hunter (aka Sally Cleveland
这会让使用数据的客户觉得 Sally 能否有被修剪掉了数据项的其它的别名。
截断的数据项很难检测。在审核数据时,我使用三种不同的方法来查找可能的截断,但我依然可能会错过一些。
数据项的长度分布。第一种方法是捕获我在各个字段中找到的大多数截断的数据。我将字段传递给 awk 命令,该命令按字段宽度计算数据项,然后我使用 sort 以宽度的逆序打印计数。例如,要检查以 tab 分隔的文件 midges 中的第 33 个字段:
awk -F"\t" 'NR>1 {a[length($33)]++} \
END {for (i in a) print i FS a}' midges | sort -nr


221519iflqd57z7tsjdsss.jpg

distro1



最长的条目恰好有 50 个字符,这是可疑的,并且在该宽度处存在数据项的“凸起”,这更加可疑。检查这些 50 个字符的项目会发现截断:


221519co73cuc20cz09or7.jpg

distro2



我用这种方式检查的其他数据表有 100、200 和 255 个字符的“凸起”。在每种情况下,这种“凸起”都包含明显的截断。
未匹配的括号。第二种方法查找类似 ...(Sally Cleveland 的数据项。一个很好的起点是数据表中所有标点符号的统计。这里我检查文件 mag2:
grep -o "[[:punct:]]" file | sort | uniqc


221519kpzgvdz9bb2pdh67.jpg

punct



请注意,mag2 中的开括号和闭括号的数量不相等。要查看发生了什么,我使用 unmatched 函数,它接受三个参数并检查数据表中的所有字段。第一个参数是文件名,第二个和第三个是开括号和闭括号,用引号括起来。
unmatched()
{
awk -F"\t" -v start="$2" -v end="$3" \
'{for (i=1;i
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

  • 0 关注
  • 0 粉丝
  • 2 帖子
广告招商