2 votes

Comment supprimer les colonnes sauf la dernière ?

Je veux déplacer les colonnes sauf la dernière, je ne sais pas s'il y avait un moyen de le faire avec awk ou sed ou une autre commande en ligne

 ...
    00000000: 30327c30 30303131 36333132 567c317c  0|2011002136|1|V
    00000010: 44204149 56452045 4d415449 544e4549  IA DE EVITAMIENT
    00000020: 7c007c4f 30327c00 302d3131 37312d33  O|.|.|2011-03-17
    00000030: 3a393020 303a3035 33427c30 38313957   09:50:00|B3W918
    00000040: 327c317c 7c39397c 4f52544f 4f4d7c53  |1|2|99|OTROS|MO
    00000050: 414b4f54 7c007c52 7c007c00 36312d47  TOKAR|.|.|.|G-16
    00000060: 7c54527c 444e4f43 52494355 204e5520  |RT|CONDUCIR UN 
    00000070: 49484556 4f4c5543 524f5020 414e5520  VEHICULO POR UNA
    ...

j'ai essayé, mais je supprime seulement la première colonne

$ cat file | sed -E $'s/ +/\t/g' | cut -f2-

je veux ce résultat. La dernière colonne

    ...
    0|2011002136|1|V
    IA DE EVITAMIENT
    O|.|.|2011-03-17
    09:50:00|B3W918
    |1|2|99|OTROS|MO
    TOKAR|.|.|.|G-16
    |RT|CONDUCIR UN 
    VEHICULO POR UNA
    ...

3voto

oguz ismail Points 34195

Il semble que vous essayez simplement d'obtenir les 16 derniers caractères.

$ sed 's/.*\(.\{16\}\)/\1/' file
0|2011002136|1|V
IA DE EVITAMIENT
O|.|.|2011-03-17
 09:50:00|B3W918
|1|2|99|OTROS|MO
TOKAR|.|.|.|G-16
|RT|CONDUCIR UN
VEHICULO POR UNA

J'ai examiné de plus près votre exemple et j'ai réalisé qu'il s'agissait d'un enregistrement hexadécimal généré avec xxd -e. Si vous voulez obtenir le fichier original, utilisez ce qui suit :

$ xxd -r file | xxd -e | xxd -r > original_file
$ cat original_file
0|2011002136|1|VIA DE EVITAMIENTO|||2011-03-17 09:50:00|B3W918|1|2|99|OTROS|MOTOKAR||||G-16|RT|CONDUCIR UN VEHICULO POR UNA

P.S : <code>original_file</code> contient des octets NUL mais ils ne s'affichent pas dans le terminal.

2voto

stevesliva Points 1340

Alternative pour imprimer les 16 derniers caractères avec grep :

grep -Po '.{16}$' fichier

ou

grep -o '.\{16\}$' fichier

  • -P pour les regex perl
  • -o pour ne retourner que les correspondances

1voto

Ed Morton Points 25374

Il suffit de supprimer les 5 premiers champs séparés par des espaces.

Avec GNU sed :

$ sed -E 's/(\s+\S+){5}\s+//' fichier
0|2011002136|1|V
IA DE EVITAMIENT
O|.|.|2011-03-17
09:50:00|B3W918
|1|2|99|OTROS|MO
TOKAR|.|.|.|G-16
|RT|CONDUCIR UN
VEHICULO POR UNA

Avec n'importe quel sed POSIX :

$ sed 's/\([[:space:]]*[^[:space:]]*\)\{5\}[[:space:]]*//' fichier
0|2011002136|1|V
IA DE EVITAMIENT
O|.|.|2011-03-17
09:50:00|B3W918
|1|2|99|OTROS|MO
TOKAR|.|.|.|G-16
|RT|CONDUCIR UN
VEHICULO POR UNA

1voto

Alex Harvey Points 3315

Les solutions les plus simples ne semblent pas avoir été mentionnées.

Vous voulez vraiment juste les caractères commençant à la 52e position. Donc utilisez cut:

Entrée :

 cat > FILE <

`

Sortie :

 cut -c52- FILE
0|2011002136|1|V
IA DE EVITAMIENT
O|.|.|2011-03-17
 09:50:00|B3W918
|1|2|99|OTROS|MO
TOKAR|.|.|.|G-16
|RT|CONDUCIR UN
VEHICULO POR UNA

Remarquez que cut peut être émulé en sed de cette manière, comme indiqué dans un commentaire :

 sed -E 's/.{51}//' FILE

Une autre façon est d'utiliser AWK pour définir les largeurs des champs, si vous avez une version de AWK qui le prend en charge comme GNU AWK, nawk (Mac OS X) etc.

 gawk 'BEGIN {FIELDWIDTHS = "15 9 9 9 9 16"} {print $6}' FILE
0|2011002136|1|V
IA DE EVITAMIENT
O|.|.|2011-03-17
 09:50:00|B3W918
|1|2|99|OTROS|MO
TOKAR|.|.|.|G-16
|RT|CONDUCIR UN
VEHICULO POR UNA

L'avantage de la solution AWK est, bien qu'un peu plus d'efforts à mettre en place, elle communique plus d'informations sur vos attentes vis-à-vis des données au lecteur de votre code.

Pour déterminer où commencent toutes les colonnes, vous pouvez utiliser CTRL + g dans Vim après avoir positionné le curseur sur elles.

`

1voto

Claes Wikner Points 1033
awk '{print "    "$NF}' file
...
0|2011002136|1|V
ÉVITEMENT
O|.|.|2011-03-17
09:50:00|B3W918
|1|2|99|AUTRES|MO
TOKAR|.|.|.|G-16
UN
UNE
...

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