【问题标题】:To remove lines from a csv which have only commas从 csv 中删除只有逗号的行
【发布时间】:2017-09-12 10:27:16
【问题描述】:

我有一个文件,其中有些行只有逗号,没有数据。问题是这些行没有固定数量的逗号。数据可能如下所示-

99,abc,123,,
bcd,123,th
,,bcd,123,th
,,,,bcd,123,th
,,,
,,,,,

输出应该是这样的

99,abc,123,,
bcd,123,th
,,bcd,123,th
,,,,bcd,123,th

我必须删除只有逗号的行。

【问题讨论】:

  • grep -v '^,*$' filesed '/^,*$/d' file
  • 嗨,这些都不起作用。我仍然可以看到只有逗号的行。
  • 您的 csv 中可能有 DOS 行结尾。你可以使用sed -E $'/^,+\\\r?$/d'

标签: regex shell awk sed


【解决方案1】:

按如下方式尝试单个 grep。(否定那些从逗号开始到最后它们有逗号的行,在所有命令中使用相同的逻辑)

grep -v '^,*$'  Input_file

也尝试使用 awk 解决方案,如下所示。

awk '!/^,*$/'  Input_file

也尝试使用 sed 解决方案。

sed -n '/^,*$/d;p'  Input_file

【讨论】:

  • 嗨,这些都不起作用。我仍然可以看到只有逗号的行
  • 不确定,这些对我来说都很好,请您通过执行 cat -v Input_file 检查您的 Input_file 中是否有回车字符,如果您看到它们,您可以通过执行 tr -d 删除它们'\r' temp_file && mv temp_file Input_file 让我看看怎么回事。
  • 嗨,它成功了!太感谢了。我的文件有回车符。
  • 很高兴它帮助了你,看到这个stackoverflow.com/help/someone-answers
  • grep '[^,]' 添加到列表中。这也会删除可能需要也可能不需要的空行。
【解决方案2】:

awk

awk -F, '!/^,+$/{print}' file

或:

awk -F, '{p=1}/^,+$/{p=0}p' file

【讨论】:

    【解决方案3】:

    grep 将删除所有仅包含逗号(至少一个)的行,并在需要时保留空白行。我相信您的要求只是删除仅包含逗号的行。

    grep -v "^,,*$" file
    

    输入

    99,abc,123,,
    bcd,123,th
    ,,bcd,123,th
    ,,,,bcd,123,th
    
    
    ,,,
    ,,,,,
    abc
    

    输出:

    99,abc,123,,
    bcd,123,th
    ,,bcd,123,th
    ,,,,bcd,123,th
    
    
    abc
    

    如果你也想删除空行,那么你可以使用:

    grep -v "^,*$" file
    

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 2020-03-14
      • 2016-03-07
      • 1970-01-01
      • 2016-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多