Awk仅根据满足条件的一行元素打印整列

时间:2017-01-20 10:00:02

标签: bash if-statement awk conditional

我有一个包含一些测量的文件列表,我想将它们编译成一个文件。如果第二列包含任何行数值数据(或者列的每一行都不包含NaN,则应将整个文件粘贴到新列的主文件(bar)中。

File1    File2    File3    Expected_Output   Actual_Output
1  4     1 NaN    1 NaN         1  4              1  4   
2  5     2  7     2 NaN         2  5              2  5
3  6     3  8     3 Nan         3  6              3  6
                                1 NaN                 
                                2  7                  
                                3  8              

我的代码目前拒绝所有在第二列上都有一个NaN的文件。

for foo in *; do cat $foo | awk '{if ($2 ~ /[0-9]/) print $0}' >> bar ;done

1 个答案:

答案 0 :(得分:2)

也许是这样的,在bash和awk中:

for f in files*; 
do 
    if awk '$2 ~ /[0-9]/{exit 1}' $f   # awk to detect numeric value, return 1 when
    then                               # above, consider /^[0-9]*$/ or such, see comments
        echo 1                         # no need for this, so use :
    else 
        echo 0                         # cat $f >> masterfile.txt
    fi 
done

即。 awk仅用于检测$2中是否存在单个数值,如果存在,则awk退出,退出代码为1,在bash中用于检测正匹配。默认情况下,awk以代码0退出。