我有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
....
....
答案 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纠正我的错误。