用于删除 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' 并在打印一行后退出。) 请注意,此答案仅适用于 GNUsed
;它不适用于 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 脚本的主要内容,如果未能解决你的问题,请参考以下文章