如何在awk中仅打印带有数字的特定列

如何在awk中仅打印带有数字的特定列,awk,Awk,我有一个文本文件,每行包含不同数量的列 我只想在第3列、第4列和第5列只包含数字时打印这些行 诀窍是第3、4和5列有时会嵌入一个特殊字符“(”,或“)”,我也想打印这些数字 cat $filename | awk '{ if ( ($3 != "^[0-9]") && ($4 != "^[0-9]") && ($5 != "^[0-9]") ) print $2, $3, $4, $5 }' >>text.dat 但它也会打印出这样的东西:Au2,C

我有一个文本文件,每行包含不同数量的列

我只想在第3列、第4列和第5列只包含数字时打印这些行

诀窍是第3、4和5列有时会嵌入一个特殊字符“(”,或“)”,我也想打印这些数字

cat $filename | awk '{ if ( ($3 != "^[0-9]") && ($4 != "^[0-9]") && ($5 != "^[0-9]") ) print $2, $3, $4, $5 }' >>text.dat
但它也会打印出这样的东西:Au2,Cu2,等等

有什么建议吗

更新:

输入文本文件的相关部分如下所示:

Cu1 Cu 0.00000 0.094635(14) 0.094635(14)
Cu2 Cu 0.00000 0.125943(15) 0.125943(15)
.
.
.
我想要的是:

Cu 0.00000 0.094635 0.094635
Cu 0.00000 0.125943 0.125943
.
.
.
注意,“Cu”来自原始输入文件第二列中的字符串,我去掉了第4列和第5列中的数字和括号。还要注意,括号也可以存在于第3列中。括号中的数字可以是一位数。

在代码中:

 ($3 != "^[0-9]") && ($4 != "^[0-9]") && ($5 != "^[0-9]") 
=
表示
不等于
它不进行正则表达式匹配测试

尝试
$3~/[0-9]+/&&$4~/[0-9]+/
等等

对于
问题 您可以做的是,在检查$2$3$4上的正则表达式匹配之前,将这些字段中的所有
(或)
替换为
,然后进行匹配测试

我希望上面的解释足够清楚

编辑

awk '{for(i=3;i<=5;i++)gsub(/\([^\)]*\)/,"",$i)}$3~/[0-9\.]*/&&$4~/[0-9\.]*/&&$5~/[0-9\.]*/' file

awk'{for(i=3;istill打印包含字母和数字组合的列的行…@Greg如果您提供一些输入/输出示例,它将帮助您更快地获得答案。谢谢。但我不希望打印第一列。我该怎么做?
kent$  echo "Cu1 Cu 0.00000 0.094635(14) 0.094635(14)
Cu2 Cu 0.00000 0.125943(15) 0.125943(15)"|awk '{for(i=3;i<=5;i++)gsub(/\([^\)]*\)/,"",$i)}$3~/[0-9\.]*/&&$4~/[0-9\.]*/&&$5~/[0-9\.]*/'                                               
Cu1 Cu 0.00000 0.094635 0.094635
Cu2 Cu 0.00000 0.125943 0.125943
awk '{for(i=3;i<=5;i++)gsub(/\([^\)]*\)/,"",$i);if($3~/[0-9\.]*/&&$4~/[0-9\.]*/&&$5~/[0-9\.]*/)print $2,$3,$4,$5}' file