【问题标题】:deleting row from a csv file using sed and save the file without deleted row使用 sed 从 csv 文件中删除行并保存文件而不删除行
【发布时间】:2023-03-08 12:58:01
【问题描述】:

我有一个 csv 文件,我想使用 unix sed 命令从中删除第二行。

file.csv 如下所示

a
b
c
d

所以它变成了 newfile.csv

a
c
d

根据我对解决方案的搜索,最简单的方法似乎是使用以下 sed 命令;

sed '2d' file.csv > newfile.csv

然而,newfile.csv 包含已删除的行

d

,不是预期的

a
c
d

我在 macOS Mojave 上使用 iTerm2

【问题讨论】:

  • file.csv 是否有可能具有 DOS 行尾 (CRLF)?执行cat -e file.csv 并确保在$s 之前看不到任何^M 字符。
  • 你是对的。有这样的字符
  • dos2unix file.csv && sed '2d' file.csv > newfile.csv
  • 我使用过 dos2unix 但没有删除它。我将尝试手动删除它们。实际上,该文件是 mac csv 格式,这导致了问题。通过用普通的 csv 保存它,问题得到解决并且代码工作。谢谢
  • 你可以使用 sed 删除那些字符,但是有点棘手。

标签: bash sed


【解决方案1】:

在这些情况下,awk 也很有用:

$ awk 'NR != 2' file.csv
a
c
d

awk 会打印除数字 2 以外的每一行。

如果更容易理解:

$ cat file.csv | awk 'NR != 2'
a
c
d

【讨论】:

  • 不。问题依然存在。这段代码只打印删除的行,就像上面的那样
  • 您原来的sed 命令应该可以正常工作,几乎可以肯定您的文件中隐藏了一些意想不到的控制字符。 cat -e file.csv 会为您返回什么?
【解决方案2】:

可能是你的文件格式错误,试试这个:

dos2unix file.csv

然后是其中之一

sed '2d' file.csv
awk 'NR!=2' file.csv

【讨论】:

    猜你喜欢
    • 2011-12-15
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2018-09-18
    • 2023-03-05
    • 1970-01-01
    • 2018-05-23
    • 2023-03-30
    相关资源
    最近更新 更多