unix:获取所有数值,包括非整数

unix: get all numeric values, including non-integers

我有一个制表符分隔的文件,其中缺失值用点表示。例如:

VAR1    VAR2    VAR3    VAR4
ID1     foo     0.1     0.1
ID2     foo     1       1
ID3     foo     foo     .
ID4     foo     foo     foo
ID5     foo     .       1
ID6     foo     -0.1    -0.1
ID7     foo     -1      -1
ID8     foo     5e-08   5e-08

我需要提取第三列中的值为数字(包括非整数、负值、科学记数法)或缺失的所有行。所以我的输出应该是这样的:

VAR1    VAR2    VAR3    VAR4
ID1     foo     0.1     0.1
ID2     foo     1       1
ID5     foo     .       1
ID6     foo     -0.1    -0.1
ID7     foo     -1      -1
ID8     foo     5e-08   5e-08

到目前为止,我已经尝试在 awk 中使用 awk -F"\t" 'BEGIN{OFS="\t"} ( ~ /^[[:alnum:]]+$/ ) {=; print}' 但后来我只得到

VAR1    VAR2    VAR3    VAR4
ID2     foo     1       1

我还想将不匹配的行(即非数字且未丢失)保存在单独的文件中。

尝试关注并告诉我这是否对您有帮助。

awk 'NR==1{print;next}  !~ /[a-zA-Z]/' Input_file

awk 'NR==1{print;next}  ~ /[0-9]/'  Input_file

如何鞠躬哒:

$ awk '*1== || =="." || NR==1' file
VAR1    VAR2    VAR3    VAR4
ID1     foo     0.1     0.1
ID2     foo     1       1
ID5     foo     .       1
ID6     foo     -0.1    -0.1
ID7     foo     -1      -1

解释:

  • NR==1 我们正在处理头记录
  • ||
  • =="."第三个字段是句点
  • ||
  • *1==第三个字段乘以1还是一样的值