Подтвердить что ты не робот

Вставить строку в файл 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?/

4b9b3361

Ответ 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