用于删除 CSV 文件第一行的 Unix 脚本

Posted

技术标签:

【中文标题】用于删除 CSV 文件第一行的 Unix 脚本【英文标题】:Unix script to remove the first line of a CSV file 【发布时间】:2012-03-26 20:21:29 【问题描述】:

我之前已经说过,我不太擅长编写脚本,所以我在下面将文件从共享目录复制到我更改权限的地方。但后来我想删除每个 CSV 文件中的第一行——标题——然后我想让它每小时运行一次。

cd /users
scp dehpc14_Disk_Quota_Report.csv /h/u544835
scp dehpc14_User_Disk_Usage.csv /h/u544835
cd /h/u544835
chmod 755 dehpc14_Disk_Quota_Report.csv
chmod 755 dehpc14_User_Disk_Usage.csv

* 在此处插入删除 csv 第一行 *

谁能帮我删除 CSV 文件的第一行并让它每小时自动运行一次,或者指导我找到一些我可能理解的东西来破解它?

【问题讨论】:

【参考方案1】:

您可以使用sed 删除文件的第一行:

sed -i '' 1d file.csv

如果您只想获取文件的内容而不需要第一行,并且修改文件,请删除 -i '' 标志:

sed 1d file.csv

这里 1d 是要执行的命令:

1 => 在哪里行动 d => 删除

所以 1d 表示“删除第 1 行”

如果你想得到第一行,你也可以使用 sed:

sed -n 1p file.csv

这里 p 代表“打印”或

sed 1q file.csv

(见 William Pursell 的评论)

【讨论】:

非常感谢您的回答和解释 'sed 1p file.csv' 示例将打印第一行两次,每隔一行打印一次。要仅打印第一行,您需要 'sed -n 1p'(尽管更常见的是执行 'sed 1q' 并在打印一行后退出。) 请注意,此答案仅适用于 GNU sed;它不适用于 BSD sed,也可以在 Mac OS X 上找到。BSD sed 需要在 -i 之后加上后缀;如果您不想要后缀,请使用-i ''(带空格)。但是手册页明确建议不要这样做。有关详细信息,请参阅Unix script to delete the first line on a Mac。其他 Unix 系统(AIX、HP-UX、Solaris 等)可能根本没有-i 选项; sed 的 POSIX 规范没有强制要求 @RKR 这应该不会花很长时间(也许如果你有一个很大的文件)。您的文件大小和完成时间是多少?究竟使用哪个命令? 对于收到错误 1d: no such file or directory 的人,请改为 sed -i '1d' filename.csv【参考方案2】:

我试图从 CSV 中删除第一行,cd 到该位置,然后问题的答案对我不起作用,正在获取

sed: 无法读取 1d: 没有这样的文件或目录

所以,我使用了 @amit 的以下声明 here

sed -i '1d' filename.csv

【讨论】:

【参考方案3】:

要创建不带标题的新 CSV 文件,您可以执行以下操作:

sed 1d file_with_header.csv > file_without_header.csv

【讨论】:

【参考方案4】:

在寻找这个答案时,我还发现了这个其他线程。他们在那里说使用tail,它实际上并没有进行OP想要的修改。您可以在课程中复制到临时文件。此外,如果您要将文件流式传输到另一个工具中,您可以在管道中使用“tail”,而不必写入临时文件或写入磁盘。

How can I remove the first line of a text file using bash/sed script?

【讨论】:

以上是关于用于删除 CSV 文件第一行的 Unix 脚本的主要内容,如果未能解决你的问题,请参考以下文章

使用条件从 CSV 文件中删除一行

用于将日期和时间列转换为 .csv 中的 unix 时间戳的 Bash 脚本

在 Perl 中,如何从文件中删除 ^M?

如何使用 Unix 从一行中删除第二次出现

使用 Pig 脚本删除文件的第一行和最后一行

从Python中的csv文件中删除第一列[重复]