awk не объединяет два файла на основе совпадения двух столбцов

Как сценарий оболочки:

tempdir="$(mktemp -d)"
i=0; for file in *.mp3; do
  i=$((i+1))
  mv -- "$file" "$tempdir/${file%%[0-9]*.mp3}$(printf '%06d.mp3' "$i")"
done
mv "$tempdir"/*. && rmdir "$tempdir"

Запустите этот скрипт в вашем каталоге mp3. Он создаст временный каталог и переместит переименованные файлы в этот каталог, чтобы избежать переименования уже существующих файлов. Когда все файлы обработаны, файлы перемещаются обратно в текущий каталог.

При циклическом переборе имен файлов ${file%%[0-9]*.mp3}удаляет существующий суффикс nnnnnn.mp3из имени файла и $(printf '%06d.mp3' "$i")добавляет новый суффикс с нулевым префиксом -к имени целевого файла.

0
24.11.2020, 11:40
1 ответ

Вы должны использовать относительный индекс текущей записи в массиве для второго выражения. Это означает a[$4]вместо a[$3].

awk 'FNR==NR{a[$3]=$5" "$6" "$7" "$8" "$9;next} ($4 in a) {print $1,$2,$3,$4,a[$4]}' file1 file2
RIGHT UTTAR_PRADESH AGRA AGRA_AERO(IAF) 27 09N 77 58E 0168
RIGHT UTTAR_PRADESH AGRA AGRA 27 10N 78 02E 0169
RIGHT MAHARASHTRA YEOTMAL YEOTMAL 20 24N 78 09E 0451
RIGHT ARUNACHAL_PRADESH LOWER_SUBANSIRI ZERO 27 35N 94 50E 1476

Это совпадение, что вы получили почти правильные результаты для этого примера, потому что большинство строк имеют идентичные 3-е и 4-е поля.

2
18.03.2021, 22:47

Теги

Похожие вопросы