我有一个大型数据集,它是一个CSV文件,我已经清理了很多。但是,有些情况下我的列不是数字,我想删除这些行。
到目前为止,我认为这样的事情会起作用。我认为解决方案可能很简单。我不确定我是否能做到这样的事情。这是一个CSV文件,所以我试着告诉awk它用逗号分隔。第一列中的良好值的一个例子是:323870133825187840
awk '/,/$1 != numeric'
对此有任何建议吗?我最初想过做某种单线,比如,[0-9]等等。如果有人能帮助我,我会非常感激。对于那里的人来说,这可能就像孩子的游戏一样:)
答案 0 :(得分:5)
假设您只处理无符号整数值,可以使用:
awk -F, '$1 ~ /^[[:digit:]]+$/'
或
awk -F, '$1 !~ /[^[:digit:]]/'
两者都使用'隐式打印'动作。第一次检查$1
仅包含数字;第二次检查$1
不包含非数字。
如果您的数字更一般(有符号,可能带有小数点,可能带有指数表示法 - 例如6.0221413e + 23(Avogadro的数字)),那么您需要一个更复杂的正则表达式并且将使用正匹配,仅选择字段1与正则表达式匹配的行,以获得有效数字。
答案 1 :(得分:1)
你可以简单地说:
grep -P '^[+-]?\d*(\.\d+)?(?<=.),' file
如果在第一列中找到带有可选=/-
符号的十进制/整数,则返回行。
以下数据将在第1列中匹配:
6.72
1235.3
72
.66
2.8
+3.5
-5.9
PS:第1列中的空列值不匹配。
答案 2 :(得分:1)
试试这个:
awk -F, '$1+0 != $1{next}1' csvFile