gawk基于第二列的一部分创建第一列

时间:2016-04-27 19:02:57

标签: gawk

我有一个2列的tsv,我需要使用第2列中的部分值插入新的第一列。

我有什么:

fastq/D0110.L001_R1_001.fastq  fastq/D0110.L001_R2_001.fastq
fastq/D0206.L001_R1_001.fastq  fastq/D0206.L001_R2_001.fastq
fastq/D0208.L001_R1_001.fastq  fastq/D0208.L001_R2_001.fastq

我想要的是什么:

D0110    fastq/D0110.L001_R1_001.fastq  fastq/D0110.L001_R2_001.fastq
D0206    fastq/D0206.L001_R1_001.fastq  fastq/D0206.L001_R2_001.fastq
D0208    fastq/D0208.L001_R1_001.fastq  fastq/D0208.L001_R2_001.fastq

我想把所有东西都拉到" fastq /"和第一个时期并打印出新的第一列。

1 个答案:

答案 0 :(得分:1)

$ awk -F'[/.]' '{printf "%s\t%s\n",$2,$0}' file
D0110   fastq/D0110.L001_R1_001.fastq   fastq/D0110.L001_R2_001.fastq
D0206   fastq/D0206.L001_R1_001.fastq   fastq/D0206.L001_R2_001.fastq
D0208   fastq/D0208.L001_R1_001.fastq   fastq/D0208.L001_R2_001.fastq

如何运作

awk隐式循环遍历所有输入行。

  • -F'[/.]'

    这告诉awk使用任何/.作为字段分隔符。这意味着,对于您的输入,您要查找的字符串将是第二个字段。

  • printf "%s\t%s\n",$2,$0

    这告诉awk打印第二个字段($2),然后是选项卡(\t),后跟输入行($0),后跟换行符( \n