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还是一样的值
我有一个制表符分隔的文件,其中缺失值用点表示。例如:
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还是一样的值