【问题标题】:Move last character of each line to new column将每行的最后一个字符移动到新列
【发布时间】:2017-02-09 10:27:00
【问题描述】:

我可以使用哪个 sed/awk 命令来剪切第 1 列中每个字符串的最后一个数字(并删除分隔符 _)并将其移动到新列(第 3 列)?

例如,

$ head -3 test1.bed
HLA:HLA00001_A*01:01:01:01_3503  1
HLA:HLA02169_A*01:01:01:02N_3291 1
HLA:HLA14798_A*01:01:01:03_2903  1

应该变成:

$ head -3 test1.bed
HLA:HLA00001_A*01:01:01:01  1 3503
HLA:HLA02169_A*01:01:01:02N 1 3291
HLA:HLA14798_A*01:01:01:03  1 2903

【问题讨论】:

    标签: awk sed cut


    【解决方案1】:
    $ sed -E 's/(.*)_([0-9]+)(.*)/\1\3 \2/' file
    HLA:HLA00001_A*01:01:01:01  1 3503
    HLA:HLA02169_A*01:01:01:02N 1 3291
    HLA:HLA14798_A*01:01:01:03  1 2903
    

    以上内容适用于 OSX sed 和更新的 GNU sed,其中 -E = 扩展正则表达式。使用任何 sed:

    $ sed 's/\(.*\)_\([0-9]*\)\(.*\)/\1\3 \2/' file
    HLA:HLA00001_A*01:01:01:01  1 3503
    HLA:HLA02169_A*01:01:01:02N 1 3291
    HLA:HLA14798_A*01:01:01:03  1 2903
    

    【讨论】:

    • 抱歉,如果我想在第一列中保留最后一个数字(包括 _),sed 语句会是什么?
    • 将_ 移动到[0-9] 之前的括号内。
    【解决方案2】:
    awk -F'[_ ]' '{print $1"_"$2,$4,$5,$3}' file
    
    HLA:HLA00001_A*01:01:01:01  1 3503
    HLA:HLA02169_A*01:01:01:02N 1  3291
    HLA:HLA14798_A*01:01:01:03  1 2903
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 2015-04-27
      • 2013-11-26
      • 1970-01-01
      • 2017-10-23
      • 2020-06-22
      相关资源
      最近更新 更多