Extraire la sous-chaîne de la première colonne

J’ai un gros fichier texte avec 2 colonnes. La première colonne est grande et compliquée, mais contient une partie name="..." . La deuxième colonne est juste un nombre.

Comment puis-je produire un fichier texte tel que la première colonne contienne UNIQUEMENT le nom, mais que la deuxième colonne rest la même et affiche le numéro? Fondamentalement, je veux extraire une sous-chaîne de la première colonne seulement ET que la 2ème colonne rest inchangée.

Données d’échantillon:

 application{id="1821", name="app-name_01"} 0 application{id="1822", name="myapp-02", optionalFlag="false"} 1 application{id="1823", optionalFlag="false", name="app_name_public"} 3 ... 

Donc, le fichier de résultat serait quelque chose comme ça

 app-name_01 0 myapp-02 1 app_name_public 3 ... 

Si votre fichier Input_file est identique à l’exemple affiché, le code suivant peut vous aider.

 awk '{sub(/.*name=\"/,"");sub(/\".* /," ")} 1' Input_file 

La sortie sera comme suit.

 app-name_01 0 myapp-02 1 app_name_public 3 

Utiliser GNU awk

 $ awk 'match($0,/name="([^"]*)"/,a){print a[1],$NF}' infile app-name_01 0 myapp-02 1 app_name_public 3 

Non-gawk

 awk 'match($0,/name="([^"]*)"/){t=substr($0,RSTART,RLENGTH);gsub(/name=|"/,"",t);print t,$NF}' infile app-name_01 0 myapp-02 1 app_name_public 3 

Consortingbution:

 $ cat infile application{id="1821", name="app-name_01"} 0 application{id="1822", name="myapp-02", optionalFlag="false"} 1 application{id="1823", optionalFlag="false", name="app_name_public"} 3 ... 

Voici une solution sed :

 sed -r 's/.*name="([^"]+).* ([0-9]+)$/\1 \2/g' Input_file 

Explication:

Avec les parenthèses, votre magasin en groupes ce qui se passe entre eux.
Le premier groupe est tout après le name=" jusqu’au premier " . [^"] signifie” pas un guillemet double “.
Le deuxième groupe est simplement “un ou plusieurs nombres à la fin de la ligne précédée d’un espace”.