从不同目录中具有相同名称的多个文件中剪切列并粘贴到一个目录中

时间:2015-10-16 13:40:53

标签: awk paste

我有多个同名文件(3pGtoA_freq.txt),但都位于不同的目录中。 每个文件都是这样的:

pos 5pG>A
1   0.162421557770395
2   0.0989643268124281
3   0.0804131316857248
4   0.0616563298066399
5   0.0577551761714493
6   0.0582450832072617
7   0.0393129770992366
8   0.037037037037037
9   0.0301016419077404
10  0.0327510917030568
11  0.0301598837209302
12  0.0309050772626932
13  0.0262089331856774
14  0.0254612546125461
15  0.0226130653266332
16  0.0206971677559913
17  0.0181280059193489
18  0.0243993993993994
19  0.0181347150259067
20  0.0224429727740986
21  0.0175690211545357
22  0.0183916336098089
23  0.0196078431372549
24  0.0187983781791375
25  0.0173192771084337

我想从每个文件中删除第2列,并在一个文件中逐列粘贴

我试过跑:

for s in results_Sample_*_hg19/results_MapDamage_Sample_*/results_Sample_*_bwa_LongSeed_sorted_hg19_noPCR/3pGtoA_freq.txt; do awk '{print $2}' $s >> /home/users/istolarek/aDNA/3pGtoA_all; done

但它并没有粘贴彼此相邻的列。

此外,我想用'*'命名每一列,这是唯一在路径中更改的字符串。

有任何帮助吗?

2 个答案:

答案 0 :(得分:0)

for $ in $(find you_file_dir -name 3pGtoA_freq.txt); do awk'{print $ 2>>“NewFile”}'$ i;完成

答案 1 :(得分:0)

我会通过在awk中并行处理所有文件来实现这一点:

awk 'BEGIN{printf "pos ";
           for(i=1;i<ARGC;++i)
             printf "%-19s",gensub("^results_Sample_","",1,gensub("_hg19.*","",1,ARGV[i]));
           printf "\n";
           while(getline<ARGV[1]){
             printf "%-4s%-19s",$1,$2;
             for(i=2;i<ARGC;++i){
               getline<ARGV[i];
               printf "%-19s",$2}
             printf "\n"}}{exit}' \
results_Sample_*_hg19/results_MapDamage_Sample_*/results_Sample_*_bwa_LongSeed_sorted_hg19_noPCR/3pGtoA_freq.txt

如果您的awk没有gensub(我使用cygwin),您可以删除前四行(printf-printf);在这种情况下,标题不会被打印出来。