2 votes

Diviser le fichier ou extraire les lignes qui diffèrent en fonction d'un motif

J'ai un fichier séparé par des tabulations comme celui-ci :

Supercontig_1.1 400  1500  1       4
Supercontig_1.1 400  1500  2       4
Supercontig_1.1 20000  138566  1       1
Supercontig_1.1 20000  138566  2       1
Supercontig_1.2 300  1000  1       2
Supercontig_1.2 300  1000  2       2
Supercontig_1.2 1300  15000  1       2
Supercontig_1.2 1300  15000  2       2
Supercontig_1.3 0  10000  1       5
Supercontig_1.3 0  10000  2       5

Et je veux extraire toutes les lignes basées sur le motif "Supercontig_1.X" dans un fichier séparé. C'est-à-dire toutes les lignes avec Supercontig_1.1 dans un fichier, toutes les lignes avec Supercontig_1.2 dans un autre... J'ai essayé de regarder la commande "sed", mais je ne suis pas sûr de comment l'utiliser quand le motif de recherche n'est pas le même pour toutes les lignes.

3voto

Birei Points 21939

Une façon d'utiliser awk:

awk '{ print $0 >$1 }' infile

Cela donne :

==> Supercontig_1.1 <==
Supercontig_1.1 400  1500  1       4
Supercontig_1.1 400  1500  2       4
Supercontig_1.1 20000  138566  1       1
Supercontig_1.1 20000  138566  2       1

==> Supercontig_1.2 <==
Supercontig_1.2 300  1000  1       2
Supercontig_1.2 300  1000  2       2
Supercontig_1.2 1300  15000  1       2
Supercontig_1.2 1300  15000  2       2

==> Supercontig_1.3 <==
Supercontig_1.3 0  10000  1       5
Supercontig_1.3 0  10000  2       5

Je ne vois pas vos champs séparés par des virgules, seulement des espaces. Changez le séparateur de champ (FS) si c'est le cas, comme : BEGIN { FS=","; } au début du script.

2voto

potong Points 18653

Cela pourrait fonctionner pour vous (GNU sed) :

sed -r ':a;$!N;s/^((\S*)\s.*)\n\2.*/\1/;ta;s/(\S*).*/\/^\1\/w\1/;P;D' file | 
sed -nf - file

Ceci fonctionnera uniquement si le fichier est trié.

Si le fichier n'est pas trié, utilisez :

sort -u -k1,1 file | sed -r 's#^(\S*).*#/^\1/w\1#' | sed -nf - file

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X