AWK: поиск имени файла в другом текстовом файле с синтаксической ошибкой - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть текстовый файл (file_list.txt), который содержит список имен файлов (например, contour_0.6_266_midpoints_2_0_0.dat ).

У меня есть второй файл ($ iw_fitted_midpoints_file.dat), который содержит эти имена файлов, за которыми следуют ряд параметров и информация x, y.Первые 10 строк в $ iw_fitted_midpoints_file.dat:

> -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= awk '{if ($ 1 == ">" && $ 2 ~'\ $ {name}') print $ 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

Например, если я искал contour_0.6_266_midpoints_2_0_0.dat приведенный выше код даст мне K = -1.573416 (то есть 32-й столбец из первой строки в $ iw_fitted_midpoints_file.dat)

1 Ответ

0 голосов
/ 10 декабря 2018

вместо экранирования специальных символов, просто сделайте точное совпадение, передайте значение как awk переменную

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