在csv文件中插入一行

时间:2012-11-15 17:18:55

标签: bash shell sed awk terminal

我有一个巨大的csv文件(按TB级排序)。

现在,我想在顶部插入一行标题。

例如,如果input.csv如下所示:

 1,2,3,4
 22,3,23,1

我希望它看起来像

id1,id2,id3,id4
 1,2,3,4
 and so on

我如何从shell,terminal,awk,bash?/

这样做

5 个答案:

答案 0 :(得分:22)

到位,使用sed:

sed -i 1i"id1,id2,id3,id4" file.csv

编辑:

正如@Ed Morton指出的那样,使用带有-i开关sed的sed编辑文件,因此在编辑大文件时会很危险。如果您在-i选项后提供前缀,则sed会创建备份。所以这样的事情会更安全:

sed -i.bak 1i"id1,id2,id3,id4" file.csv

原始文件将位于file.csv.bak

答案 1 :(得分:14)

这很简单:

{ echo "id1,id2,id3,id4"; cat file.csv; } > newfile.csv

使用简单的shell连接。

修改

在下面的讨论主题之后,我建议:

  • 使用标题创建一个文件,head.txt

然后:

cat head.txt file.csv > newfile.csv

答案 2 :(得分:2)

编辑。当我写这个答案时,我忽略了问题的“太字节”部分。因此,不使用此处提供的方法。我仍然留下这篇文章,因为它宣传使用这个奇妙的工具,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 1}}写和退出。

使用这种方法,你真的在​​编辑文件,它比sed方法快两倍。另外,ed被称为“大文件安全”!

完成。

答案 3 :(得分:1)

没有简单的方法,你将不得不重写文件。可能最安全的方法是

 ( echo "id1,id2,id3,id4" ; cat file ) > newFile && rm file

IHTH

答案 4 :(得分:-2)

echo "id1,id2,id3,id4" >> data.csv