Merging/joining в lot of csv поля with numeric digits in the file ямс

Эксперт we process our csv восходит, we произведись в lot of output поля with 30 000 lines in each one of them. They all have the same columns/fields. They пахал all also in csv format and we удар в лунку them into the same folder on the Linux server. The поля пахал uniquely named using в combination of восходите, украдите and numeric digits. See below.

AB_20151127_120000_0_SEGMENT_FINAL.csv
AB_20151127_120000_1_SEGMENT_FINAL.csv
AB_20151127_120000_2_SEGMENT_FINAL.csv
AB_20151127_120000_3_SEGMENT_FINAL.csv
.
.
.
AB_20151127_120000_599_SEGMENT_FINAL.csv

So now we need to merge/join all of them into one big file called: AB_20151127_120000_SEGMENT_FINAL.csv (я заметил the missing numeric digits from the merged file)

I tried awk эксперт below but it is not working. Please tell я what I did wrong.

awk '"AB_20151127_120000_" NR-1 "_SEGMENT_FINAL.csv"' > AB_20151127_120000_SEGMENT_FINAL.csv
2
задан 9 December 2015 в 13:47

2 ответа

Если порядок, в котором связываются файлы, не важен, используйте:

cat AB_20151127_120000_*_SEGMENT_FINAL.csv > AB_20151127_120000_SEGMENT_FINAL.csv

, Если порядок важен, необходимо будет стать творческими. Если Вы знаете количество сегментов, 599, например, можно использовать расширение фигурной скобки (эти \, только там, чтобы позволить мне распечатать команду на двух строках для удобочитаемости):

cat AB_20151127_120000_{0..599}_SEGMENT_FINAL.csv > \
    AB_20151127_120000_SEGMENT_FINAL.csv

, Если Вы не делаете, можно все еще использовать расширение фигурной скобки. Просто выберите достаточно большое количество, чтобы быть уверенными, что все файлы будут включены и проигнорируют сообщения об ошибках о несуществующих файлах:

cat AB_20151127_120000_{0..599}_SEGMENT_FINAL.csv > \
    AB_20151127_120000_SEGMENT_FINAL.csv 2>/dev/null

, С другой стороны, можно генерировать список отсортированных имен файлов и использования что:

cat $(printf '%s\n' AB_20151127_120000_*_SEGMENT_FINAL.csv | sort -nt_ -k4) > \
    AB_20151127_120000_SEGMENT_FINAL.csv

Эти printf распечатает каждое имя файла, сопровождаемое новой строкой, которая является переданным sort, который отсортирует его численно (-n) на 4-м поле (-t4), где поля определяются _ (-t_).

3
ответ дан 2 December 2019 в 02:54

Если у Вас есть доступ к оболочке Zsh, задача может быть уменьшена до единственной команды:

cat AB_20151127_120000_*(n)_SEGMENT_FINAL.csv >AB_20151127_120000_SEGMENT_FINAL.csv

Это вызвано тем, что (n) globbing спецификатор вынуждает * globbing шаблон расшириться до списка имен файлов, отсортированных в их естественном порядке, в противоположность их лексикографическому порядку.

Для сравнения, расширения имени файла в Bash:

$ for f in *; do echo "$f"; done
AB_20151127_120000_0_SEGMENT_FINAL.csv
AB_20151127_120000_10_SEGMENT_FINAL.csv
AB_20151127_120000_1_SEGMENT_FINAL.csv
AB_20151127_120000_2_SEGMENT_FINAL.csv
AB_20151127_120000_3_SEGMENT_FINAL.csv

расширение Имени файла в Zsh с помощью (n) globbing спецификатор:

% for f in *(n); do echo "$f"; done
AB_20151127_120000_0_SEGMENT_FINAL.csv
AB_20151127_120000_1_SEGMENT_FINAL.csv
AB_20151127_120000_2_SEGMENT_FINAL.csv
AB_20151127_120000_3_SEGMENT_FINAL.csv
AB_20151127_120000_10_SEGMENT_FINAL.csv
0
ответ дан 2 December 2019 в 02:54

Другие вопросы по тегам:

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