我有大约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 --
但是我不知道如何在这种情况下这样做,因为我没有先前的模式知识
答案 0 :(得分:2)
您可以获取内容模式并对其进行排序
$ 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:):;
相同的模式将是连续的。假设每个文件有一条记录。