【问题标题】:Sort files based on content根据内容对文件进行排序
【发布时间】:2017-07-18 09:16:40
【问题描述】:

我有大约 1000 个来自系统发育分析的文件,每个文件看起来都像这样

File 1
   (((A:0.03550734102561460548,B:0.04004337325891465377):0.01263892787244691278,C:0.03773369182398536581):0.08345900687345568503,(D:0.04441859961888914438,((E:0.04707945363105774106,F:0.03769496882665739068):0.00478087012691866091,G:0.01269975716918288373):0.01263526019405349088):0.13087200352448438712,H:1.91169780510990117151):0.0;

File 12

((A:0.11176787864288327545,(B:0.18283029119402782747,C:0.12136417416322728413):0.02367730683755531543):0.21101090994668161849,(((F:0.06464548582830945134,E:0.06903977777526745796):0.01710921464740109560,G:0.01577242071367901746):0.00958883666063858192,D:0.03506359820882300193):0.47082738536589324729,H:2.94973933657097164840):0.0;

我想读取每个文件的内容,并根据模式(即文件内容)对其进行分类。这里的数字代表分支长度,对于任何文件都不相同。所以,我想根据字母 A 到 H 对文件进行分类。比如说,例如所有从 A 到 H 以相同顺序排列的字母的文件,我想将这些文件分类到单独的文件夹中。例如:

对于 File1 中的模式,模式将是这样的,忽略数字(分支长度):

   (((A:,B:),C:):,(D:,((E:,F:):,G:):):,H:):;

所有包含此模式的文件都将进入一个文件夹。 文件 1 文件 5 文件 6 文件 10 ....

我知道根据特定模式对内容进行排序:

    grep -l -Z pattern files | xargs -0 mv -t target-directory --  

但我不确定如何处理这种情况,因为我对模式没有先验知识

【问题讨论】:

  • 为什么不使用聚类算法对系统发育树进行分类呢?我不知道你说的在生物学上是否有意义
  • 我只是想大致了解一下,接下来一定要试试

标签: sorting awk sed grep


【解决方案1】:

您可以获取内容模式并对其进行排序

$ for f in file{1..2}; 
     do printf "%s\t" $f; tr -d '[ 0-9.]' <$f; 
     done | 
  sort -k2

file1   (((A:,B:):,C:):,(D:,((E:,F:):,G:):):,H:):;
file2   ((A:,(B:,C:):):,(((F:,E:):,G:):,D:):,H:):;

相同的模式将是连续的。这假设您每个文件都有一条记录。

【讨论】:

    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多