【问题标题】:Weird behaviour awk last character "]" [duplicate]奇怪的行为awk最后一个字符“]” [重复]
【发布时间】:2020-02-17 22:26:43
【问题描述】:

我在尝试将文件中的某些列括起来时遇到了奇怪的 awk 行为:

batch ID        tumor_reads2_fastqgzs   tumor_reads_fastqgzs    tumor_reads2_fastqgzs ID        tumor_reads_fastqgzs ID
9_S8    9_S8_L001_R2_001.fastq.gz       9_S8_L001_R1_001.fastq.gz       file-Fk3BgVj4yBGZqQvF2VV2Q2Z4   file-Fk3BgfQ4yBGYz756BGvbzkP8
7_S6    7_S6_L001_R2_001.fastq.gz       7_S6_L001_R1_001.fastq.gz       file-Fk3Bg884yBGYF4xXJjpf08f8   file-Fk3Bg1j4yBGvbp9VK2ZQ76G3
10_S9   10_S9_L001_R2_001.fastq.gz      10_S9_L001_R1_001.fastq.gz      file-Fk3Bfg84yBGq9g7zJk5kv435   file-Fk3BfVQ4yBGxxPZy6pjxv635
3_S3    3_S3_L001_R2_001.fastq.gz       3_S3_L001_R1_001.fastq.gz       file-Fk3Bf3Q4yBGq9g7zJk5kv42z   file-Fk3BfB04yBGYz756BGvbzkGk
15_S14  15_S14_L001_R2_001.fastq.gz     15_S14_L001_R1_001.fastq.gz     file-Fk3Bbp04yBGkyPqy2073BKf7   file-Fk3BbV84yBGq00fKK3j5KjG5

这是我的文件,我想在第 4 列和第 5 列周围加上括号:

awk -v OFS="\t" '{if($0 ~ /^batch/){print $0}else{print $1, $2, $3, "["$4"]", "["$5"]";}}' myfile

但它输出了这个:

batch ID        tumor_reads2_fastqgzs   tumor_reads_fastqgzs    tumor_reads2_fastqgzs ID        tumor_reads_fastqgzs ID
]_S8    9_S8_L001_R2_001.fastq.gz       9_S8_L001_R1_001.fastq.gz       [file-Fk3BgVj4yBGZqQvF2VV2Q2Z4] [file-Fk3BgfQ4yBGYz756BGvbzkP8
]_S6    7_S6_L001_R2_001.fastq.gz       7_S6_L001_R1_001.fastq.gz       [file-Fk3Bg884yBGYF4xXJjpf08f8] [file-Fk3Bg1j4yBGvbp9VK2ZQ76G3
]0_S9   10_S9_L001_R2_001.fastq.gz      10_S9_L001_R1_001.fastq.gz      [file-Fk3Bfg84yBGq9g7zJk5kv435] [file-Fk3BfVQ4yBGxxPZy6pjxv635
]_S3    3_S3_L001_R2_001.fastq.gz       3_S3_L001_R1_001.fastq.gz       [file-Fk3Bf3Q4yBGq9g7zJk5kv42z] [file-Fk3BfB04yBGYz756BGvbzkGk
]5_S14  15_S14_L001_R2_001.fastq.gz     15_S14_L001_R1_001.fastq.gz     [file-Fk3Bbp04yBGkyPqy2073BKf7] [file-Fk3BbV84yBGq00fKK3j5KjG5

由于某种原因,最后一个括号替换了第一个字符。知道为什么吗?我该如何解决? 我也尝试使用sub(),但它做了同样的事情

【问题讨论】:

    标签: awk carriage-return


    【解决方案1】:

    您的代码对我有用。恕我直言,您的 Input_file 中可能有控制 M 个字符,因此您可以添加一段代码来删除它们,请您尝试以下操作。

    awk -v OFS="\t" '{gsub(/\r/,"");if($0 ~ /^batch/){print $0}else{print $1, $2, $3, "["$4"]", "["$5"]";}}' Input_file
    

    【讨论】:

    • 你说得对,行尾有一些 ^M 字符。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 2014-07-29
    • 1970-01-01
    • 2018-07-27
    相关资源
    最近更新 更多