【问题标题】:remove whitespace from beginning of second column从第二列的开头删除空格
【发布时间】:2023-03-19 19:23:02
【问题描述】:

我有一个空格分隔的文件,如下所示:

12  12.57428314.57490104 ENSG00000065361 rs2271194 rs61939899
2  2.198148577.198835577 ENSG00000065413 rs4524134 rs2697288 rs6738721
6  6.84279922.84407274 ENSG00000065609 rs2016358 rs35791305
10  10.104585135.104956335 ENSG00000065613 rs72811696

我想从第二列中删除前导空格(有两个空格分隔列 1 和 2,而不是一个空格)。有谁知道这方面的 sed 或 awk 命令?

【问题讨论】:

    标签: bash awk sed cut


    【解决方案1】:

    带切:

    cut -d " " -f 1,3- file
    

    输出:

    12 12.57428314.57490104 ENSG00000065361 rs2271194 rs61939899 2 2.198148577.198835577 ENSG00000065413 rs4524134 rs2697288 rs6738721 6 6.84279922.84407274 ENSG00000065609 rs2016358 rs35791305 10 10.104585135.104956335 ENSG00000065613 rs72811696

    【讨论】:

      【解决方案2】:

      tr -s(或tr --squeeze-repeats)将删除重复字符。所以你如果要替换all个重复的空格,可以这样写:

      tr -s ' '   < input-file   > output-file
      

      输入:

      12  12.57428314.57490104 ENSG00000065361 rs2271194 rs61939899
      2  2.198148577.198835577 ENSG00000065413 rs4524134 rs2697288 rs6738721
      6  6.84279922.84407274 ENSG00000065609 rs2016358 rs35791305
      10  10.104585135.104956335 ENSG00000065613 rs72811696
      

      输出:

      12.57428314.57490104 ENSG00000065361 rs2271194 rs61939899
      2 2.198148577.198835577 ENSG00000065413 rs4524134 rs2697288 rs6738721
      6 6.84279922.84407274 ENSG00000065609 rs2016358 rs35791305
      10 10.104585135.104956335 ENSG00000065613 rs72811696
      

      【讨论】:

        【解决方案3】:

        使用GNU sed,在第一列之后用单个空格替换多个空白字符

        sed -E 's/^(\S+)\s+/\1 /' ip.txt
        

        对于其他版本,请使用

        • [[:space:]]\s
        • [^[:space:]]\S

        :blank:(空格和制表符)而不是:space:(空白字符)

        【讨论】:

          【解决方案4】:

          此 AWK 用单个空格替换所有出现的连续空格:

          $ awk 'gsub(/ +/," ")' file 
          12 12.57428314.57490104 ENSG00000065361 rs2271194 rs61939899
          2 2.198148577.198835577 ENSG00000065413 rs4524134 rs2697288 rs6738721
          6 6.84279922.84407274 ENSG00000065609 rs2016358 rs35791305
          10 10.104585135.104956335 ENSG00000065613 rs72811696
          

          【讨论】:

            【解决方案5】:

            只需删除每行的第一个空格:

            $ sed 's/ //' file
            12 12.57428314.57490104 ENSG00000065361 rs2271194 rs61939899
            2 2.198148577.198835577 ENSG00000065413 rs4524134 rs2697288 rs6738721
            6 6.84279922.84407274 ENSG00000065609 rs2016358 rs35791305
            10 10.104585135.104956335 ENSG00000065613 rs72811696
            

            【讨论】:

              猜你喜欢
              • 2018-04-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-08-30
              • 2016-09-30
              • 2011-12-22
              • 2021-02-12
              • 1970-01-01
              相关资源
              最近更新 更多