Для меня было важно пропустить двоичные файлы и скрытые файлы:
Этот вариант хорошо сработал для меня:
find . -type f -not -path '*/\.*' -exec grep -Il '.' {} \; | xargs -d '\n' -L 1 dos2unix -k
Что переводится как: рекурсивно найти все нескрытые файлы в текущем каталоге, затем с помощью grep вывести список всех не -binary (-I) непустые файлы, затем передать их в xargs (разделенные символами новой строки) по одному файлу за раз в dos2unix и сохранить исходную метку времени.
См. также:
Быстрого решения вашей проблемы нет, поскольку входные файлы не отсортированы. Однако вы можете сделать что-то вроде этого:
join -o 0,1.2,1.3,2.3 <(sort A.csv) <(sort B.csv)
Хотя вопрос неточно определяет, какие поля должны использоваться для объединения - похоже, что это поле1 и поле2 (с опечаткой в A.csv
field2=20.875
вместо 20.857
).
Если вам нужно присоединиться только к первому полю, то решение Майклса подходит.
Если вам нужно объединить два первых поля, вы можете использовать:
join <(sed -e 's/ */:/' a.csv | sort) <(sed -e 's/ */:/' b.csv | sort)
(возможно, вам придется подправить sed regex, если поля разделены не только пробелами).
Решение Ракеша довольно неэффективно, поскольку оно сканирует оба A.csv
и B.csv
для каждой строки в A.csv
.
Попробуйте этот:
for i in `awk '{print $1}' A.csv`;
do
t1=`awk -v a="$i" '$1==a {print $3}' A.csv`;
awk -F' ' -v a="$i" -v b="$t1" '$1==a {print $1" "$2" "$3" " b }' B.csv;
done
С таким количеством данных вам следует рассмотреть возможность импорта данных в базу данных, создания индексов по (широта, долгота), а затем вы сможете получить результаты с помощью
select a.latitude, a.longitude, a.value, b.value
from a, b
where a.latitude = b.latitude
and a.longitude = b.longitude;