Вставить строку в файл csv
У меня огромный файл csv (по порядку терабайт).
Теперь я хочу вставить одну строку, которая является заголовком в верхней части.
Например, если input.csv выглядит так:
1,2,3,4
22,3,23,1
Я хочу, чтобы он выглядел как
id1,id2,id3,id4
1,2,3,4
and so on
Как это сделать из оболочки, терминала, awk, bash?/
Ответы
Ответ 1
На месте, используя sed:
sed -i 1i"id1,id2,id3,id4" file.csv
изменить:
Как указывает @Ed Morton, использование sed с помощью -i
switch sed редактирует файл на месте и поэтому может быть опасным при редактировании больших файлов. Если вы предоставите префикс после опции -i
, тогда sed создаст резервную копию. Итак, что-то вроде этого было бы безопаснее:
sed -i.bak 1i"id1,id2,id3,id4" file.csv
Исходный файл затем будет расположен в file.csv.bak
Ответ 2
Это так просто:
{ echo "id1,id2,id3,id4"; cat file.csv; } > newfile.csv
с помощью простой конкатенации оболочки.
ИЗМЕНИТЬ
после обсуждения ниже, я предлагаю следующее:
- создайте файл с заголовком,
head.txt
Тогда:
cat head.txt file.csv > newfile.csv
Ответ 3
Изменить. Когда я написал этот ответ, я упустил часть "терабайта" вопроса. Следовательно, не используйте метод, представленный здесь. Я все еще оставляю этот пост, поскольку он рекламирует использование этого замечательного инструмента, ed
, стандартного текстового редактора.
Как обычно, ed
- стандартный текстовый редактор. Решение, использующее sed -i
, не означает, что "отредактируйте файл на месте". Вместо этого он выводит свой контент во временный файл, а затем переименовывает этот файл в исходный. Это действительно не хорошо для больших файлов!
Использование ed
вместо этого действительно редактирует файл. Что-то в следующих строках:
#!/bin/bash
file="input.csv"
{
ed -s "$file" <<EOF
1
i
id1,id2,id3,id4
.
wq
EOF
} > /dev/null
Объяснение: 1
переходит в первую строку, i
переходит в режим вставки, затем мы вставляем id1,id2,id3,id4
, затем .
, чтобы вернуться в обычный режим, и wq
для записи и выхода.
С помощью этого метода вы действительно редактируете файл, и он в два раза быстрее, чем метод sed. Кроме того, ed
известен как "большой файл в безопасности"!
Готово.
Ответ 4
Там нет простого способа, вам придется переписать файл. Вероятно, самый безопасный способ -
( echo "id1,id2,id3,id4" ; cat file ) > newFile && rm file
IHTH