我有一些包含以下数据的文件:

 160-68 160 68 B-A 0011 3.80247
 160-68 160 68 B-A 0022 3.73454
 160-69 160 69 B-A 0088 2.76641
 160-69 160 69 B-A 0022 3.54446
 160-69 160 69 B-A 0088 4.24609
 160-69 160 69 B-A 0011 3.97644
 160-69 160 69 B-A 0021 1.82292

我需要在第5列的数组中提取具有任何值(可以是负数:ex-12222)的行。
用[00880021]输出:
160-69 160 69 B-A 0088 2.76641
160-69 160 69 B-A 0088 4.24609
160-69 160 69 B-A 0021 1.82292

我目前正在用Ruby做这个,但是有没有一种方法可以用Bash做得更快呢?
谢谢。

最佳答案

bash不太可能比ruby快:bash通常相当慢。我会选择awk或perl

awk -v values="0088 0021" '
    BEGIN {
        n = split(values, a)
        for (i=1; i<=n; i++) b[a[i]]=1
    }
    $5 in b
' file

perl -ane 'BEGIN {%v = ("0088"=>1, "0021"=>1)} print if $v{$F[4]}' file

关于bash - 根据与多个值之一匹配的列提取行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35107947/

10-12 14:14