ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Используйте выделенные / локальные инструменты, если они доступны, это хакерство:
Произошла очевидная ошибка в желаемом выводе: имя b
не должно совпадать int1
.
$ tail -n+1 *.csv
==> f1.csv <==
name,pos
a,1020
b,1200
c,1800
==> f2.csv <==
interval_name,start,end
int1,990,1090
int2,1100,1150
int3,500,2000
$ awk -F, -vOFS=, '
BEGIN {
print "name,pos,interval_name,start,end"
PROCINFO["sorted_in"]="@ind_num_asc"
}
FNR==1 {next}
NR==FNR {Int[$1] = $2 "," $3; next}
{
for(i in Int) {
split(Int[i], I)
if($2 >= I[1] && $2 <= I[2]) print $0, i, Int[i]
}
}
' f2.csv f1.csv
Выходы:
name,pos,interval_name,start,end
a,1020,int1,990,1090
a,1020,int3,500,2000
b,1200,int3,500,2000
c,1800,int3,500,2000
Это не особенно эффективно в любом случае;единственная используемая сортировка состоит в том, чтобы гарантировать, что массив Int анализируется в правильном порядке, который изменяется, если ваши данные выборки не указывают на фактическую схему.Мне было бы очень интересно узнать, как мое решение работает с пандами.