gawk 根据第二列的一部分创建第一列

gawk to create first column based on part of second column

我有一个 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/" 和第一个句点之间的所有内容,并将其打印为新的第一列。

$ awk -F'[/.]' '{printf "%s\t%s\n",,[=10=]}' 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",,[=14=]

    这告诉 awk 打印第二个字段 (</code>),然后是制表符 (<code>\t),然后是输入行 ([=17=]),然后是换行符字符 (\n)