在 CSV 文件中插入一行



我有一个巨大的csv文件(大约是TB)。

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

例如,如果输入.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

编辑。 当我写这个答案时,我忽略了问题的"TB"部分。因此,不要使用此处介绍的方法。我仍然离开这篇文章,因为它宣传了这个奇妙工具的使用, 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是"大文件安全"!

做。

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

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

希斯

>>数据

中回显"id1,id2,id3,id4".csv

相关内容

  • 没有找到相关文章

最新更新