巨大なcsvファイルがあります(テラバイトのオーダー)。
さて、ヘッダーになっている行を一番上に挿入したいと思います。
たとえば、input.csvが次のようになっているとします。
1,2,3,4
22,3,23,1
こんな感じにしたい
id1,id2,id3,id4
1,2,3,4
and so on
シェル、ターミナル、awk、bashからこれを行うにはどうすればよいですか?
その場で、sedを使用します。
sed -i 1i"id1,id2,id3,id4" file.csv
編集:
@Ed Mortonが指摘しているように、sedを-i
スイッチと一緒に使用すると、sedはファイルを適切に編集するため、大きなファイルを編集するときに危険な場合があります。 -i
オプションの後にプレフィックスを指定すると、sedはバックアップを作成します。したがって、このようなものはより安全です:
sed -i.bak 1i"id1,id2,id3,id4" file.csv
元のファイルはfile.csv.bak
に配置されます
これはとても簡単です:
{ echo "id1,id2,id3,id4"; cat file.csv; } > newfile.csv
単純なシェル連結を使用します。
[〜#〜]編集[〜#〜]
以下のディスカッションスレッドの後、私はこれを提案します:
head.txt
次に:
cat head.txt file.csv > newfile.csv
編集この回答を書いたとき、質問の「テラバイト」の部分を見落としました。したがって、ここに示す方法は使用しないでください。この素晴らしいツールである標準テキストエディタ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メソッドより2倍高速です。また、ed
は「大きなファイルでも安全」であることが知られています!
できました。
簡単な方法はありません。ファイルを書き直す必要があります。おそらく最も安全な方法は
( echo "id1,id2,id3,id4" ; cat file ) > newFile && rm file
IHTH