Ответ 1
Предполагая, что все файлы csv имеют одинаковый формат и все начинаются с одного и того же заголовка, вы можете написать небольшой скрипт, как показано ниже, чтобы добавить все файлы только в один и взять только один раз заголовок.
#!/bin/bash
OutFileName="X.csv" # Fix the output name
i=0 # Reset a counter
for filename in ./*.csv; do
if [ "$filename" != "$OutFileName" ] ; # Avoid recursion
then
if [[ $i -eq 0 ]] ; then
head -1 "$filename" > "$OutFileName" # Copy header if it is the first file
fi
tail -n +2 "$filename" >> "$OutFileName" # Append from the 2nd line each file
i=$(( $i + 1 )) # Increase the counter
fi
done
Заметки:
- Команда
head -1
илиhead -n 1
печатает первую строку файла (head -n 1
). -
tail -n +2
печатает хвост файла, начиная со строк № 2 (+2
) - Тест
[... ]
используется для исключения выходного файла из списка ввода. - Выходной файл перезаписывается каждый раз.
- Команда
cat a.csv b.csv > X.csv
может быть просто использована для добавления a.csv и b csv в один файл (но вы копируете заголовок 2 раза).
Команда paste
вставляет файлы один на другой. Если в файле есть пробелы в виде строк, вы можете получить вывод, о котором вы сообщили выше.
Использование -d ,
просит paste command
, чтобы определить поля, разделенные запятой ,
, но это не так для формата файлов, которые вы сообщили выше.
Вместо этого команда cat
объединяет файлы и печатает на стандартном выводе, что означает, что она записывает один файл за другим.
Синтаксис одиночных опций приведен в разделе " man head
или " man tail
(в некоторых версиях можно использовать head -1
а вместо head -n 1
)...