将一个文件中的部分列用作其他文件中的搜索词

时间:2016-11-07 21:29:38

标签: linux bash shell awk grep

我有两个文件。我正在搜索的输出文件具有地震位置,并具有以下格式:

std::string

我想使用第一列的最后6位数字(即' 090418'以及#190; 19090418')与第二列的前3位数字(即&#39 ; 072' out of' 0728')作为我的搜索词。我正在搜索的文件格式如下:

19090212 1323 30.12 36 19.41 103 28.24   7.29   0.00  4 149 25.8 0.02  5.7  9.8 D -         0
19090216 1828 49.61 36 13.27 101 35.38  10.94   0.00 13  54 38.5 0.07  0.3  0.7 B           0
19090711 2114 54.11 35  1.07  99 56.42   7.00   0.00  7 177 18.7 4.00 63.3 53.2 D #         0

在我搜索第二个文件后,我需要弄清楚该部分中有多少行。所以对于这个例子,如果我搜索上面第二个文件显示的术语,我想知道090212132有2行,090216182有5行。

这是我的第一篇文章,所以请让我知道如何在帖子中提高清晰度或简洁性。谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

awk救援!

$ awk 'NR==FNR{a[substr($1,3) substr($2,1,3)]; next} 
              {k=substr($3,1,9)} 
        k in a{a[k]++} 
           END{for(k in a) if(a[k]>0) print k,a[k]}' file1 file2

使用您的输入文件,没有预期的输出。

答案 1 :(得分:0)

答案karakfa建议工作!我的输出如下:

100224194 7
100117172 18
091004005 11
090520220 10
090526143 21
090122033 20

感谢您的帮助!

答案 2 :(得分:0)

Karafka回答解释

awk 'NR==FNR {               # For first file
     $1 = substr($1, 3);     # Get last  6 characters from first col
     $2 = substr($2, 1, 3);  # Get first 3 characters from second col
     a[$1 $2];               # Add to an array
     next }                  # Move to next record in first file

                             # Start processing second file
    {k = substr($3, 1, 9)}   # Get first 9 character for third col
    k in a {a[k]++}          # If key in a, then increment the key

    END {
      for (k in a)           # Iterate array
        if (a[k] > 0)        # If pattern was matched
           print k, a[k]     # print the pattern and num occurrence
    }'