通过 bash 脚本向有时为空的 CSV 文件添加标头

问题描述 投票:0回答:1

我尝试通过 bash 添加一些标头到偶尔为空的 CSV 文件(因此有时该文件为空,有时会有数据)。到目前为止,我已经尝试过使用 sed 和 awk。

Sed:

sed -i '1liAge,Sex,Location' $nameOfFile

awk:

awk 'BEGIN{print "Age,Sex,Location"}1' $nameOfFile

这两个似乎都不起作用,因为没有添加标头。当我回显 $nameOfFile 时,会打印 csvInfo.csv,因此我不认为 $nameOfFile 有任何问题。不知道我哪里错了。

bash awk sed
1个回答
3
投票

您的

sed
命令要求文件中至少已有一行,所以我认为您无法可靠地使其工作。

您拥有的 Awk 命令应该像这样工作,但它将结果写入标准输出。 如果您有 GNU Awk,则可以使用

-i inplace
获得类似于
sed -i
的行为;但可移植的解决方案是将结果写入临时文件,然后移回到旧文件的顶部。

awk 'BEGIN{print "Age,Sex,Location"}1' "$nameOfFile" >tmp
mv tmp "$nameOfFile"

另请注意 何时在 shell 变量周围加上引号

如果您想避免添加已经存在的标头,您可以保留

BEGIN
块,但禁止打印旧标头(如果存在):

awk 'BEGIN{print "Age,Sex,Location"}
    NR>1 || $0 !~ /^Age,Sex,Location$/' "$nameOfFile" >tmp
mv tmp "$nameOfFile"

对于生产脚本来说,临时文件的适当卫生在某种程度上涉及更多,但如果这只是供您个人使用,那么我们就将其保留。有关更多信息,也许可以查看在意外的 bash 退出中删除创建的临时文件

© www.soinside.com 2019 - 2024. All rights reserved.