我有两个文件。我正在搜索的输出文件具有地震位置,并具有以下格式:
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行。
这是我的第一篇文章,所以请让我知道如何在帖子中提高清晰度或简洁性。谢谢你的帮助!
答案 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
}'