2010-11-17 9 views
3

Salut tout le monde. J'ai un fichier plein de données, chaque ligne se compose de quelque chose de similaire à "755545; 45634; 1244". Parfois, quelque part, il peut se produire un nombre inconnu de nouvelles lignes supplémentaires, dont je ne veux pas. Exemple:Suppression de deux nouvelles lignes en utilisant awk/sed

256163;16816;1651 
16156;165165;1165 

15153;135135;15351 
15153;1351;8 



165;15313;153513 
254;45;45 

sortie souhaitée:

256163;16816;1651 
16156;165165;1165  
15153;135135;15351 
15153;1351;8 
165;15313;153513 
254;45;45 

Cela peut-il être fait facilement avec awk/sed utilitaire en unix?

Répondre

9

La réponse de @Luixv est correct s'il n'y a pas d'espace sur les lignes "vides". Si des espaces est présent utiliser cette place:

sed '/^[ \t]*$/d' 

Thats un espace avant le \ t dans les parenthèses, à savoir [espace \ t]

Si cela ne fonctionne pas, vous pourriez avoir un problème avec nouvelles lignes. Faites un:

$ file test_file 
test_file: ISO-8859 text, with CRLF, LF line terminators 

Si vous obtenez la sortie ci-dessus, convertir le fichier à l'aide unix:

$ dos2unix test_file 
+0

OUI OUI OUI! Génial! Exactement. Entièrement fonctionnel après merci! – tsusanka

+0

Faites également attention si vous utilisez des fichiers provenant de Windows. Si c'est le cas, vous devrez peut-être faire correspondre le^M (le caractère de fin de fenêtre supplémentaire) ainsi que les espaces et les onglets. – qwerty9967

6

sed '/^$/d'

+0

Thx pour réponse. J'ai essayé mais il semble qu'il ajoute une nouvelle ligne supplémentaire au lieu de les supprimer .. – tsusanka

+0

bien, je l'essaie en ce moment et cela fonctionne. Alors ce que je suppose est que vous n'avez pas de lignes vides mais quelque chose d'autre (peut-être des onglets, des espaces?). Corrigez un petit fichier de test et essayez-le. – Luixv

+0

Hmm, c'est intéressant. Je l'ai essayé avec mon exemple et son fonctionnement. Mais je l'applique sur le fichier principal, il semble que ça ne fonctionne pas. Pourrait-il être en raison de la taille du fichier (environ 250 Mo de texte pur!). – tsusanka

1
sed -nre "s/([^$])/\1/p" input 
0

Résolu avec ssed super_sed si vous ne l'avez pas installé, installez-le.

ssed -R -e '/(^$|\s)/ d' yourFile 

ou

cat yourFile| ssed -R -e '/(^$|\s)/ d' 

Bonne Seding

PS: fonctionnera même si vous avez des onglets ou \r \t \n donc le \s dans le ReqExp.

\r = Return Carriage 
\n = New Line 
\t = Tab 
1
sed -n 's/^[ ,\t]*$/!p' filename 
+0

Depuis qu'unix considère l'espace et la tabulation comme des caractères différents i guesws, nous devrions mentionner les deux – Sabarish

+0

(Correction de l'échappement de tabulation Les évasions utilisent des espaces de retour Un espace vers l'avant n'est probablement pas ce qui était prévu. – Evi1M4chine