AWK:在另一个产生语法错误的文本文件中搜索文件名

时间:2018-12-10 15:22:50

标签: awk escaping special-characters

我有一个文本文件(file_list.txt),其中包含文件名列表(例如 contour_0.6_266_midpoints_2_0_0_0.dat )。

我有第二个文件($ iw_fitted_midpoints_file.dat),其中包含这些文件名,后跟一系列参数和x,y信息。 $ iw_fitted_midpoints_file.dat的前10行是:

> -Z contour_0.6_266_midpoints_2_0_0.dat 0.125512 96 0.009539 0.000017 1524.160000 1.000000 97.000000 44.000000 4 6 0.670000 0.214029 0.214030 -1.180430 -0.636157 1.307050 -0.647329 -1.101411 36.000000 -0.647530 0.145132 -1.400605 0.219184 30.949074 0.670000 48.602367 0.200000 -4.915458 -1.573416 0.428059 3376.000000
3333.000000 0.105569 
3334.000000 0.106486 
3335.000000 0.107501 
3336.000000 0.109010 
3337.000000 0.110718 
3338.000000 0.107739 
3339.000000 0.107382 
3340.000000 0.106499 
3341.000000 0.106408 

我正在尝试在第二个文件($ iw_fitted_midpoints_file.dat)中搜索每个文件名,并提取相关行的第32列。我的问题是我无法获得转义“。”的语法。正确的文件名。

这是我的代码

for f in `cat file_list.txt`; do

name=$(echo "$f" | cut -f 1,2,3 -d '.')

K=确认'{if($ 1 ==“>” && $ 2〜'\ $ {name}')打印$ 0}'$iw_fitted_midpoints_file.dat

echo $K



  done

这是我的错误

awk: {if ($1 == ">" && $2 ~ contour_0.6_96_midpoints_16_0_0.dat) print $0}
awk:                                                       ^ syntax error

例如,如果我正在搜索Silhouette_0.6_266_midpoints_2_0_0.dat,上面的代码将给我K = -1.573416(即$ iw_fitted_midpoints_file.dat中第一行的第32列)

1 个答案:

答案 0 :(得分:0)

与其转义特殊字符,不如进行精确匹配,将值作为awk变量传递

$ awk -v name="$f" '$1==">" && $2==name {print $32}' datafile