Bash 创建合并两列的新列
我有100个类似格式的文件(如下所示)。我想在每个文件中添加一个新列,这些文件组合了列Bash 创建合并两列的新列,bash,awk,sed,Bash,Awk,Sed,我有100个类似格式的文件(如下所示)。我想在每个文件中添加一个新列,这些文件组合了列mir和seq,并由\uu 这必须为所有文件自动完成。我的所有文件都有以下名称: Miraligner_240G.txt.mirna Miraligner_239R.txt.mirna .... 它们在u和.txt.mirna之间有所不同 我的输入文件如下所示: seq name freq mir start end mism a
mir
和seq
,并由\uu
这必须为所有文件自动完成。我的所有文件都有以下名称:
Miraligner_240G.txt.mirna
Miraligner_239R.txt.mirna
....
它们在u和.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
....
....
我的输出文件应如下所示:
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
....
....
使用
awk
可以添加包含第1列和第4列值的列,如下所示:
awk '{print $4"_"$1, $0}' filename
OFS
将打印输出字段分隔符变量的值
通过管道将输出传输到列-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纠正了我的错误。使用
awk
可以添加一列,其中包含第1列和第4列的值,如下所示:
awk '{print $4"_"$1, $0}' filename
OFS
将打印输出字段分隔符变量的值
通过管道将输出传输到列-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纠正了我的错误。如何对所有文件执行此操作?我试着这样做:对于Miraligner*.txt.mirna中的f,请执行awk'{print$4“{1 of s$0}'”$f“>“MiralignerMerge${f#}”将for循环打印到同一个文件?@BioMan,如我所述,如果要执行内联编辑,请使用
gawk
或perl
。这是因为awk
没有内联编辑选项。如果您愿意,我可以在perl
中添加答案。请给我看一下perl答案。我也将尝试gawk是否可以不使用最新的for循环覆盖输入文件?如何对所有文件执行此操作?我试着这样做:对于Miraligner*.txt.mirna中的f,请执行awk'{print$4“{1 of s$0}'”$f“>“MiralignerMerge${f#}”将for循环打印到同一个文件?@BioMan,如我所述,如果要执行内联编辑,请使用gawk
或perl
。这是因为awk
没有内联编辑选项。如果您愿意,我可以在perl
中添加答案。请给我看一下perl答案。我也将尝试gawk。是否可以不使用最新的for循环覆盖输入文件?