【问题标题】:Delete lines using gawk, awk or sed使用 gawk、awk 或 sed 删除行
【发布时间】:2017-01-22 20:35:22
【问题描述】:

原问题

我有一个逗号分隔的 .csv 文件,如下所示:

header1,header2,header3
value10,value20,value30
value11,value21,value31
,,
,,
,,

如何删除 csv 末尾的“空行”?空行的数量并不总是相同的,可以是任意数量。

以及如何将修改后的csv保存到新文件中?

关于 Thor 编辑的问题

我有一个逗号分隔的 .csv 文件,如下所示:

header1,header2,header3
value10,value20,value30
value11,value21,value31
[empty line]
[empty line]
[empty line]

如何删除 csv 末尾的“空行”?空行的数量并不总是相同的,可以是任意数量。

以及如何将修改后的csv保存到新文件中?

【问题讨论】:

  • This sed answer 关于删除最后一行是否为空白的问题,实际上是删除文件末尾的所有空白行。
  • @thor:你编辑破坏了 Ivimma 的问题! 原始问题包含两个逗号,并且没有空行。
  • @Cyrus:你说得对,我错过了那部分,我的错。我们如何解决它?已经有基于错误编辑的答案。我会将更正后的版本添加到问题中。
  • 是的,想删除这些“空行”并保留其他所有内容。 “空行”总是放在最后,所以中间或其他地方没有“空行”。在示例中我只需要保存前三行
  • 再次 - 你如何定义“空行”?一行什么都不包含,或者一行只包含逗号,或者一行只包含空格字符,或者一行只包含空格字符和逗号或其他什么?您的问题令人困惑,因为它包含 2 个对“空行”短语可能解释的矛盾示例(由@Thor 提供?)。

标签: awk sed gawk


【解决方案1】:

这取决于你对空行的定义。如果它真的是 empty 因为除了换行符什么都没有,使用 awk 你可以:

$ awk '/./' file

/^$/ 即,如果只有换行符(awk 中的默认RS),则打印它。如果您需要输出到另一个文件:

$ awk '/./' file > file2

如果您对 empty 的定义可以容忍记录中的空格以及换行符:

$ awk '/^[^ ]+$/' file

更新:啊哈,空虚的定义归结为所有逗号。 OP 在 cmets 中提到 “空行”总是放在末尾​​em>,所以一旦我们遇到第一行 empty (即,记录中只有逗号 = @ 987654326@ = !/[^,]/ - 抱歉双重否定),退出。

$ awk '!/[^,]/{exit}1' file 
header1,header2,header3
value10,value20,value30
value11,value21,value31

【讨论】:

    【解决方案2】:

    一种快速而肮脏(但有效)的方法是在键盘上查找文件中没有的字符,例如µ。然后只需输入:

    tr '\n' 'µ' < myfile.csv | sed -e 's/[,µ]*$//' | tr 'µ' '\n' > out.csv
    

    没试过,但你可以根据自己的需要调整这个想法。也许您还必须在括号表达式中添加空格字符(或制表符等)。

    这个想法是用(临时)µ 替换“行尾”字符,以获得(临时)单行文件;然后使用一个非常基本的正则表达式来删除你想要的;最后恢复“行尾”字符。

    【讨论】:

      【解决方案3】:

      在下面使用 -

      sed -i '/^$/d' file
      

      解释:

       ^$ : To search line which doesn't contain anything from start(^) to last($)
       d  : To delete that searched line 
       i  : to make the changes permanent so that you don't need to redirect to another file and then rename it again.
      

      【讨论】:

        【解决方案4】:

        您的问题并不清楚,但听起来您只需要:

        grep -v '[^,]' file1 > file2
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-02-27
          • 2023-03-05
          • 1970-01-01
          • 2011-05-11
          • 2011-12-21
          • 2020-04-25
          • 1970-01-01
          相关资源
          最近更新 更多