[Shell-script] garder une partie de texte

Résolu/Fermé
Phil - 27 févr. 2008 à 10:51
 Phil - 27 févr. 2008 à 11:41
Bonjour à tous,

Voilà le type de fichier que je dois traiter :
WRA    78.69 209.1     P       2005/12/01 03:43:48.2  -0.3
WTUG    0.41  33.4     P       2005/12/01 03:31:13.6   0.9
YAH    13.67  55.3     P       2005/12/01 03:34:06.7  -1.5
YKA    26.76  52.4     P       2005/12/01 03:36:29.2   0.4
YKA    26.76  52.4     PcP     2005/12/01 03:39:49.6   0.0
YKA    40.13  45.3     P       2005/12/01 03:36:29.3   0.7
YKA    40.13  45.3     PcP     2005/12/01 03:39:49.6  -0.4
YKW3   26.75  52.2   e P       2005/12/01 03:36:28.5  -0.3 

2005/12/01 03:25:17.8     27.9945   61.4253     10.0 f     9    7 222
2005/12/01 03:25:28.9     38.7630  -29.2200      4.2      13    7 331    
2005/12/01 03:26:59.4    -11.8520  166.2570    125.9      10    7 216  
2005/12/01 03:27:03.9     40.6490   23.3140     20.0       9    6  97  
2005/12/01 03:30:57.0     54.5910  164.8380    104.0      50   40 128
2005/12/01 03:30:58.3     54.5090 -164.7730     93.1     154  131 137
2005/12/01 03:30:59.4     55.8060 -165.2640     33.0       1    1 360
2005/12/01 03:30:59.4     55.8060 -165.2640     33.0       1    1 360

Je voudrais conserver uniquement les lignes qui commencent par une date.
Ce qui donnerait en fichier sortie :
2005/12/01 03:25:17.8     27.9945   61.4253     10.0 f     9    7 222
2005/12/01 03:25:28.9     38.7630  -29.2200      4.2      13    7 331    
2005/12/01 03:26:59.4    -11.8520  166.2570    125.9      10    7 216  
2005/12/01 03:27:03.9     40.6490   23.3140     20.0       9    6  97  
2005/12/01 03:30:57.0     54.5910  164.8380    104.0      50   40 128
2005/12/01 03:30:58.3     54.5090 -164.7730     93.1     154  131 137
2005/12/01 03:30:59.4     55.8060 -165.2640     33.0       1    1 360
2005/12/01 03:30:59.4     55.8060 -165.2640     33.0       1    1 360

Quelqu'un aurait une idée avec un Sed ou Awk ? Par contre le nombre de lignes commençant par une date n'est pas fixe d'un fichier à un autre. Pour l'exemple ci-dessus je ne cherche donc pas à récupérer les 8 dernières lignes du fichier (Je pense que cette remarque est importante :) )

Merci d'avance.

Phil.

Les jeunes enterrent les vieux...
Les vivants enterrent les morts.
Buc...

2 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
27 févr. 2008 à 11:08
Salut,

root@debian:~# cat fichier.txt
WRA    78.69 209.1     P       2005/12/01 03:43:48.2  -0.3
WTUG    0.41  33.4     P       2005/12/01 03:31:13.6   0.9
YAH    13.67  55.3     P       2005/12/01 03:34:06.7  -1.5
YKA    26.76  52.4     P       2005/12/01 03:36:29.2   0.4
YKA    26.76  52.4     PcP     2005/12/01 03:39:49.6   0.0
YKA    40.13  45.3     P       2005/12/01 03:36:29.3   0.7
YKA    40.13  45.3     PcP     2005/12/01 03:39:49.6  -0.4
YKW3   26.75  52.2   e P       2005/12/01 03:36:28.5  -0.3

2005/12/01 03:25:17.8     27.9945   61.4253     10.0 f     9    7 222
2005/12/01 03:25:28.9     38.7630  -29.2200      4.2      13    7 331
2005/12/01 03:26:59.4    -11.8520  166.2570    125.9      10    7 216
2005/12/01 03:27:03.9     40.6490   23.3140     20.0       9    6  97
2005/12/01 03:30:57.0     54.5910  164.8380    104.0      50   40 128
2005/12/01 03:30:58.3     54.5090 -164.7730     93.1     154  131 137
2005/12/01 03:30:59.4     55.8060 -165.2640     33.0       1    1 360
2005/12/01 03:30:59.4     55.8060 -165.2640     33.0       1    1 360
root@debian:~# grep -E '^[0-9]{4}/[0-9]{2}/[0-9]{2}' fichier.txt
2005/12/01 03:25:17.8     27.9945   61.4253     10.0 f     9    7 222
2005/12/01 03:25:28.9     38.7630  -29.2200      4.2      13    7 331
2005/12/01 03:26:59.4    -11.8520  166.2570    125.9      10    7 216
2005/12/01 03:27:03.9     40.6490   23.3140     20.0       9    6  97
2005/12/01 03:30:57.0     54.5910  164.8380    104.0      50   40 128
2005/12/01 03:30:58.3     54.5090 -164.7730     93.1     154  131 137
2005/12/01 03:30:59.4     55.8060 -165.2640     33.0       1    1 360
2005/12/01 03:30:59.4     55.8060 -165.2640     33.0       1    1 360
root@debian:~#

1
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
27 févr. 2008 à 11:36
Salut,

S'il n'y a pas de lignes autres que celles commençant par une date ayant des chiffres en début, tu peux essayer aussi de cette façon avec "sed" (il faut enlever l'espace entre les 2 premiers crochets) :
 sed -n '/^[ [:digit:]]/p' p fichier
Sinon en gardant la regex de "lami20j" tu peux aussi faire comme suit :
sed -nr '\#^[0-9]{4}/[0-9]{2}/[0-9]{2}#p'> fichier
;-))
1
Ok merçi à vous !
La solution de lami20J marche très bien. Je vais aussi essayer celles que tu me proposes.

Merci, ce problème peut donc être considéré comme résolu.

Phil.
0