【问题标题】:Delete single character rows in a text file删除文本文件中的单个字符行
【发布时间】:2014-01-30 14:02:48
【问题描述】:

我有一个包含大约 800 万行的文本文件。我需要删除所有包含单个字符的行。例如

This is 
the 
text file 
I 
wrote

我想删除上面有代词“I”的整行。奖励指向可以在 linux 命令行上执行此操作的人。

【问题讨论】:

    标签: linux command-line sed awk


    【解决方案1】:

    这是一个尝试:

    awk 'length>1' file
    

    如果您不想删除空行(零个字符)

    awk 'length!=1' file
    

    如果行上有空格(不想算作字符):

    awk '{gsub(/[[:space:]]/,"")}length!=1' file
    

    【讨论】:

    • 感谢您和@pfnuesel 的快速回复。我选择了 awk 'length>1' file > newfile,它就像一个冠军!
    【解决方案2】:

    也可以这样做:

    sed '/^.$/d' inputFile
    

    要将输出存储在新文件中:

    sed '/^.$/d' inputFile > outputFile
    

    或用于文件内编辑:

    sed -i '/^.$/d' inputFile
    

    【讨论】:

    • 谢谢!我真的无法分辨性能上的差异,所以我只是根据字母顺序选择工具。 S 之前的 A :)
    • @AdamEstrada 今后,您应该选择专为手头工作设计的工具。 grep 用于查找 RE 并打印结果(基于 ed 命令 G/RE/P 命名),sed 用于在单行(流 ED)上替换 RE,awk 用于其他所有文本操作。
    • @EdMorton 我完全同意,我正在编写一份包含所有这些技巧的备忘单,以在未来帮助我。
    【解决方案3】:

    你只需要:

    grep '..' file
    

    除非你也想保留空行,在这种情况下它会是:

    grep -v '^.$' file
    

    【讨论】:

    • 如此简单.. 太棒了!
    【解决方案4】:

    由shell完成

    #! /usr/bin/bash
    
    while read line
    do
       if [[ "${#line}" != 1 ]]; then
           echo $line
       fi
    done < file
    

    【讨论】:

      【解决方案5】:

      狂欢

       while read -r line
       do 
           if [ ${#line} -gt 1 ] ;then    
              echo $line 
           fi
       done < file
      

      【讨论】:

        【解决方案6】:

        如果你的系统上有 Ruby

        ruby -ne 'puts $_ if $_.chomp.length >1 ' file
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-19
          相关资源
          最近更新 更多