奇怪的行为 awk 最后一个字符“]”
Weird behaviour awk last character "]"
我在尝试对文件中的某些列进行括号化时遇到了奇怪的 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([=11=] ~ /^batch/){print [=11=]}else{print , , , "[""]", "[""]";}}' 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()
但它做了同样的事情
你的代码对我有用。恕我直言,您的 Input_file 中有可能包含控制 M 字符,因此您可以添加一段代码来删除它们,能否请您尝试以下操作。
awk -v OFS="\t" '{gsub(/\r/,"");if([=10=] ~ /^batch/){print [=10=]}else{print , , , "[""]", "[""]";}}' Input_file
我在尝试对文件中的某些列进行括号化时遇到了奇怪的 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([=11=] ~ /^batch/){print [=11=]}else{print , , , "[""]", "[""]";}}' 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()
但它做了同样的事情
你的代码对我有用。恕我直言,您的 Input_file 中有可能包含控制 M 字符,因此您可以添加一段代码来删除它们,能否请您尝试以下操作。
awk -v OFS="\t" '{gsub(/\r/,"");if([=10=] ~ /^batch/){print [=10=]}else{print , , , "[""]", "[""]";}}' Input_file