Имеет ли Awk ограничение на количество данных, которое он может обрабатывать?Проблемы с функцией AWK
for i in "052" "064" "060" "070" "074" "076" "178"
do
awk -v f="${i}" -F, 'match ($1,f) { print $2","$3 }' uls.csv > ul$i.csv
awk -v f="${i}" -F, 'match ($1,f) { print $2","$3 }' dls.csv > dl$i.csv
awk -v n="${i}" -F, 'match ($1,n) { print $2","$3 }' dlsur.csv >> dlu$i.csv
awk -v k="${i}" -F, 'match ($1,k) { print $2","$3 }' dailyd.csv >> dla$i.csv
awk -v m="${i}" -F, 'match ($1,m) { print $2","$3 }' dailyu.csv >> ula$i.csv
done
Когда я запускаю этот фрагмент кода, он в основном извлекает данные из файлов csv и создает новые файлы. этот фрагмент кода работает отлично. , но когда я добавляю дополнительный файл (в цикле for), например «180», он создаст этот файл, но также будет содержать несколько строк данных из других файлов. Я много раз перебирал код. Я даже проверил необработанные данные, прежде чем он войдет в этот цикл, и все правильно. Это похоже на сбой в awk. Нужно ли применять функцию ожидания так, чтобы она могла догнать?
Ваше регулярное выражение очень общее; вы уверены, что это просто не соответствует больше строк, чем предполагалось? – chepner
Это не так. Каждая из этих строк имеет уникальный идентификатор, который также частично является именем файла, поэтому все теги - 052 и 064. – user2883071
Но может ли строка появляться в другом месте в строке? '$ 0' - это вся строка, а не первое поле. Возможно, вы хотите «match ($ 1, f)» вместо этого. – chepner