J’ai les données suivantes délimitées par des tabulations:
chr1 3119713 3119728 MA05911Bach1Mafk 839 + chr1 3119716 3119731 MA05011MAFNFE2 860 + chr1 3120036 3120051 MA01502Nfe2l2 866 +
Ce que je veux faire est de supprimer 7 caractères de la 4ème colonne. Résultant en
chr1 3119713 3119728 Bach1Mafk 839 + chr1 3119716 3119731 MAFNFE2 860 + chr1 3120036 3120051 Nfe2l2 866 +
Comment puis je faire ça? Notez que la sortie doit également être séparée de TAB.
Je suis coincé avec le code suivant, qui remplace de la première colonne, que je ne veux pas
sed 's/^.\{7\}//' myfile.txt
awk '{ $4 = substr($4, 8); print }'
perl -anE'$F[3] =~ s/.{7}//; say join "\t", @F' data.txt
ou
perl -anE'substr $F[3],0,7,""; say join "\t", @F' data.txt
Avec sed
$ sed -E 's/^(([^\t]+\t){3}).{7}/\1/' myfile.txt chr1 3119713 3119728 Bach1Mafk 839 + chr1 3119716 3119731 MAFNFE2 860 + chr1 3120036 3120051 Nfe2l2 866 +
-E
utilise des expressions régulières étendues, pour éviter d’avoir à utiliser \
for (){}
. Certaines versions sed
peuvent avoir besoin de -r
au lieu de -E
^(([^\t]+\t){3})
capturer les trois premières colonnes, facile de changer le nombre de colonnes si nécessaire .{7}
caractères à supprimer de la 4ème colonne \1
les colonnes capturées -i
pour l’ édition sur place Avec perl
vous pouvez utiliser \K
pour lookbehind positif de longueur variable
perl -pe 's/^([^\t]+\t){3}\K.{7}//' myfile.txt