1
votes

Supprimer les chaînes après la correspondance et exclure également les sauts de ligne nuls

Input:

sed 's%/\bta:/b[^ ]*%%g' output.txt

Sortie souhaitée:

bta01524 BIRC3
bta01522 FOS 
bta01522 IGF1R

J'ai essayé le code suivant, mais je n'ai pas pu supprimer le bta:

bta01524 Platinum drug resistance - Bos taurus (cow) (1)

  bta:514386 BIRC3

bta01522 Endocrine resistance - Bos taurus (cow) (2)

  bta:280795 FOS
  bta:281848 IGF1R


1 commentaires

Par sauts de ligne nuls , voulez-vous dire des lignes vides ou autre chose?


3 Réponses :


2
votes

Si la ligne ne commence pas par un espace ( / ^ [^] / ), enregistrez la première colonne dans la variable save . Si la ligne commence par un espace ( / ^ / ) et contient des colonnes ( NF! = 0 ), imprimez la variable save et le contenu de la colonne 2 .

bta01524 BIRC3
bta01522 FOS
bta01522 IGF1R

Résultat:

awk '/^[^ ]/ {save=$1}; /^ / && NF!=0 {print save,$2}' file


0 commentaires

1
votes

En plus de sed , awk peut fournir une solution intéressante à votre problème, par exemple

$ awk '/^\w/{lbl=$1;next} NF>1{print lbl,$NF}' file
bta01524 BIRC3
bta01522 FOS
bta01522 IGF1R

Explication fort>

  • règle 1 - / ^ \ w {lbl = $ 1; next} si le premier caractère est un \ w (caractère de mot), définissez le libellé ( lbl ) dans le premier champ et obtenir l'enregistrement next ;
  • règle 2 - NF> 1 {print lbl, $ NF} si le nombre de champs ( NF ) est supérieur à 1, imprimer l'étiquette et le dernier champ .

( remarque: le raccourci mot-caractère '\ w' nécessite GNU awk et équivaut à [a-zA-Z0- 9_] )

Exemple d'utilisation / de sortie

Utilisation de votre entrée dans fichier ,

XXX


1 commentaires

Merci @EdMorton. Je n'y ai même pas pensé jusqu'à ce que tu l'aies compris.



0
votes

Cela pourrait fonctionner pour vous (GNU sed):

sed -En '/^\S/h;//d;G;s/^.*\s(\S+)\n(\S+).*/\2 \1/p' file

Si la ligne actuelle commence par un espace non blanc, faites une copie dans l'espace d'attente, puis supprimez-la. Sinon, ajoutez l'espace de maintien à la ligne actuelle et en utilisant la correspondance de modèle et les références arrière, façonnez le format souhaité. En cas de succès, imprimez le résultat.

N.B. L'option -n est définie pour empêcher l'impression normale et reproduire une nature de type grep .


0 commentaires