创建合并两列的新列

时间:2015-07-05 08:25:23

标签: bash awk sed

我有100个格式相似的文件(如下所示)。我想为每个文件添加一个新列,该列合并了由mir分隔的列seq_ 必须自动为所有文件完成此操作。我的所有文件都有这些名称:

Miraligner_240G.txt.mirna
Miraligner_239R.txt.mirna
....

它们在_和.txt.mirna

之间有所不同

我的输入文件如下所示:

seq                     name          freq  mir           start end mism add    t5  t3       s5         s3    DB  ambiguity
TGAGAAGAAGCACTGTAGCTCTT seq_100006_x2   2   hsa-miR-143-3p  61  81  6AT u-TT    0   0   AGTCTGAG    GCTCAGGA    miRNA   1
GACCCTGTAGATCCGAATTTGTA seq_100012_x2   2   hsa-miR-10a-5p  22  43  1GT u-A 0   u-G TATATACC    TGTGTAAG    miRNA   1
GACCCTGTAGATCCGAATTTGTG seq_100013_x35  35  hsa-miR-10a-5p  22  44  1GT 0   0   0   TATATACC    TGTGTAAG    miRNA   1
TTAGGGCCCTGGCTCCATCT    seq_100019_x13  13  hsa-miR-1296-5p 16  35  0   0   0   u-CC    TGGGTTAG    CTCCTTTA    miRNA   1
GTGAACGGGCGCCATCCCGAGGCTT   seq_100029_x2   2   hsa-miR-887-3p  48  72  0   0   0   d-CTT   TGGAGTGA    GAGGCTTT    miRNA   1
ACCCGGTAGATCCGAATTTGTG  seq_10002_x5    5   hsa-miR-10a-5p  23  44  5GT 0   d-T 0   TATATACC    TGTGTAAG    miRNA   1
CAACGGAATCCCAAAAGCAGCTGAAAA seq_100031_x3   3   hsa-miR-191-5p  16  39  24AT    u-AAA   0   d-T CGGGCAAC    GCTGTTGT    miRNA   1
TAGTGCAATATTGCTTATAGGGTAT   seq_100033_x2   2   hsa-miR-454-3p  64  86  0   u-AT    0   0   TGAGTAGT    GGGTTTTG    miRNA   1
CAACGGAATCCGAAAAGCAGCTG seq_100037_x16  16  hsa-miR-191-5p  16  38  12GC    0   0   0   CGGGCAAC    GCTGTTGT    miRNA   1

我的输出文件应如下所示:

mir_seq                                  seq                        name          freq  mir           start end mism add t5 t3       s5         s3    DB  ambiguity
hsa-miR-143-3p_TGAGAAGAAGCACTGTAGCTCTT   TGAGAAGAAGCACTGTAGCTCTT    seq_100006_x2   2   hsa-miR-143-3p  61  81  6AT u-TT    0   0   AGTCTGAG    GCTCAGGA    miRNA   1
....
....

1 个答案:

答案 0 :(得分:4)

使用awk,您可以将包含第1列和第4列值的列添加为:

awk '{print $4"_"$1, $0}' filename

OFS将打印输出字段分隔符变量的值。

将输出汇总到column -t

mir_seq                                     seq                          name            freq  mir              start  end  mism  add    t5   t3     s5        s3        DB     ambiguity
hsa-miR-143-3p_TGAGAAGAAGCACTGTAGCTCTT      TGAGAAGAAGCACTGTAGCTCTT      seq_100006_x2   2     hsa-miR-143-3p   61     81   6AT   u-TT   0    0      AGTCTGAG  GCTCAGGA  miRNA  1
hsa-miR-10a-5p_GACCCTGTAGATCCGAATTTGTA      GACCCTGTAGATCCGAATTTGTA      seq_100012_x2   2     hsa-miR-10a-5p   22     43   1GT   u-A    0    u-G    TATATACC  TGTGTAAG  miRNA  1
hsa-miR-10a-5p_GACCCTGTAGATCCGAATTTGTG      GACCCTGTAGATCCGAATTTGTG      seq_100013_x35  35    hsa-miR-10a-5p   22     44   1GT   0      0    0      TATATACC  TGTGTAAG  miRNA  1
hsa-miR-1296-5p_TTAGGGCCCTGGCTCCATCT        TTAGGGCCCTGGCTCCATCT         seq_100019_x13  13    hsa-miR-1296-5p  16     35   0     0      0    u-CC   TGGGTTAG  CTCCTTTA  miRNA  1
hsa-miR-887-3p_GTGAACGGGCGCCATCCCGAGGCTT    GTGAACGGGCGCCATCCCGAGGCTT    seq_100029_x2   2     hsa-miR-887-3p   48     72   0     0      0    d-CTT  TGGAGTGA  GAGGCTTT  miRNA  1
hsa-miR-10a-5p_ACCCGGTAGATCCGAATTTGTG       ACCCGGTAGATCCGAATTTGTG       seq_10002_x5    5     hsa-miR-10a-5p   23     44   5GT   0      d-T  0      TATATACC  TGTGTAAG  miRNA  1
hsa-miR-191-5p_CAACGGAATCCCAAAAGCAGCTGAAAA  CAACGGAATCCCAAAAGCAGCTGAAAA  seq_100031_x3   3     hsa-miR-191-5p   16     39   24AT  u-AAA  0    d-T    CGGGCAAC  GCTGTTGT  miRNA  1
hsa-miR-454-3p_TAGTGCAATATTGCTTATAGGGTAT    TAGTGCAATATTGCTTATAGGGTAT    seq_100033_x2   2     hsa-miR-454-3p   64     86   0     u-AT   0    0      TGAGTAGT  GGGTTTTG  miRNA  1
hsa-miR-191-5p_CAACGGAATCCGAAAAGCAGCTG      CAACGGAATCCGAAAAGCAGCTG      seq_100037_x16  16    hsa-miR-191-5p   16     38   12GC  0      0    0      CGGGCAAC  GCTGTTGT  miRNA  1

由于awk没有内联编辑选项,因此您必须使用gawk进行内联编辑。使用awk,您可以将输出写入临时文件,然后将其移动/复制/重命名为原始文件名。

在多个文件中使用该命令:

for i in Miraligner_*.txt.mirna; do
    awk '{print $4"_"$1, $0}' "$i" | column -t;
done

如果您使用gawk并且对内联编辑感兴趣,请使用gawk -i inplace

使用perl

perl -ane 'print "$F[3]_$F[0] $_";' filename | column -t

如果要写入文件,请使用-i选项:

perl -ane 'print "$F[3]_$F[0] $_";' -i filename

使用\t

分隔所有输入字段和附加列(字段)
perl -ane '$"="\t"; print "$F[3]_$F[0] @F\n";' -i filename

如果您希望文件中的输出采用适当的表格形式:

for i in Miraligner_*.txt.mirna; do
    awk '{print $4"_"$1, $0}' "$i" | column -t > temp && mv temp "$i";
done

这会将输出分成您文件中的正确列。为此,您不需要内联编辑选项。

感谢@EdMorton纠正我的错误。