2016-09-13 3 views
0

J'ai un dossier de 68 fichiers (fichiers .txt) dont 38 fichiers ont des zéros commençant à la quatrième ligne et se terminant en troisième colonne.Script Bash pour parcourir le dossier et supprimer les zéros dans chaque fichier

Je voudrais supprimer tous les zéros des fichiers en utilisant un script bash. Les fichiers .txt sont au format suivant (j'attache des images des trois premiers fichiers dans mon répertoire), vous pouvez voir pour chaque fichier une nouvelle ligne avec un nombre supplémentaire de zéros a été ajouté.

Quelques exemples des fichiers sont listés ci-dessous

regional_vol_GM_atlas1.txt 

667869 667869.000000 
580083 580083.000000 
316133 316133.000000 



regional_vol_GM_atlas2.txt 

667869 667869.000000 
580083 580083.000000 
316133 316133.000000 
0 0.000000 
9020 9020.000000 
11065 11065.000000 



regional_vol_GM_atlas3.txt 

667869 667869.000000 
580083 580083.000000 
316133 316133.000000 
0 0.000000 
0 0.000000 
11651 11651.000000 

regional_vol_GM_atlas3.txt 

667869 667869.000000 
580083 580083.000000 
316133 316133.000000 
0 0.000000 
0 0.000000 
0 0.000000 
12706 12706.000000 

pour le fichier 38ème, 37 lignes de zéros ont été rembourrés à partir de la troisième ligne, comment puis-je les supprimer par script? le format de fichier commun de tous les fichiers dans le répertoire est regional_vol_GM_atlas * txt

+0

est là modèle commun pour le nommage de fichiers? comme 'file1.txt, file2.txt ...'? –

+2

[S'il vous plaît ne pas poster des captures d'écran de code.] (Http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a -question/285557 # 285557) Collez le code à la place. – anishsane

+0

@PS. Le fichier se termine par region_vol_GM_atlas2, regional_vol_GM_atlas2, regional_vol_GM_atlas3, .. etc, le fichier se termine par regional_vol_GM_atlas38 – DevanDevak

Répondre

1

Supprimer les lignes comme 0 0.0000 de la 3e ligne et zéros à la fin (et le point) du dernier champ comme celui-ci:

sed -i -e '3,$ {/0 0\.0\+/d;}' -e 's/\.0\+ *$//' regional*txt 

avant:

4536 23452345.0000 
0 0.0000 

après:

4536 23452345 

(dot + 1 ou plusieurs zéros à la fin de la ligne, modifiés par "rien")

avertissement: c'est "in-place". Faites une sauvegarde avant d'essayer cela. Il ne compte pas combien de colonnes sont là. Si c'est un problème, alors awk doit être utilisé.

(faire un test non-lieu comme celui-ci: sed -e '3,$ {/0 0\.0\+/d;}' -e 's/\.0\+ *$//' one_of_your_files.txt)

cas récursive: si les fichiers sont dans plusieurs subdirs appliquer sed sur le résultat de la commande find:

sed -e '3,$ {/0 0\.0\+/d;}' -e 's/\.0\+ *$//' $(find subdir_root -type f -name "regional*.txt") 
+0

Mais comment je peux parcourir tout le répertoire et supprimer les zéros, ce n'est pas un fichier, il y a 38 fichiers comme celui-ci et le 38ème fichier, là sont 37 rangées de zéros rembourrés, comment puis-je les supprimer tous, – DevanDevak

+0

Je ne vois pas de changement, j'ai couru la requête, mais pas de changement dans les fichiers – DevanDevak

+0

@DevanDevak: si votre saveur de 'sed' ne comprend pas' -i 'option, remplace' sed -i 'par' perl -pi -e '. – mouviciel