2011-12-26 16 views
7

Chcę usunąć nową linię \n tylko z końca pliku w systemie UNIX
np.Usuń znak nowej linii z końca pliku

abc 
def 
ghi 
​ 

wyjście powinno być

abc 
def 
ghi 

W końcu pliku nie powinno być pojedynczym \n

+0

awk '{if (NR == 1 && $ 0 ~ /> /) {print $ 0; next} if ($ 0 ~/^> /) {print "\ n" $ 0; next} else {printf ("% s" , $ 0)}} 'filename Próbowałem powyższego skryptu, ale usuwa on wszystkie \ n , ale chcę, aby \ n istniejące na końcu pliku zostały usunięte. – Jayashri

+0

Jaki język? Jaka platforma? – Oded

+0

Unix, Próbowałem za pomocą skryptu poleceń awk – Jayashri

Odpowiedz

4

Generalnie, narzędzia tekstowe Unix są szczęśliwsi jeśli zrobić mieć nowej linii na koniec ostatniej linii w pliku. Dlaczego musisz go usunąć?

Nie możesz tego zrobić (o ile wiem) z awk, ale łatwo z perl:

perl -e 'undef $/; $_ = <>; s/\R\z//; print' 

EDIT: lat później przychodzi mi do głowy, że może mieć na myśli „jak usunąć kończące puste linie od końca pliku "; Innymi słowy, być może chciałbyś zredukować liczbę dwóch lub więcejkolejnych linii nowego do jednej, tylko na końcu pliku. Ponownie jest to najłatwiejszy z perl:

perl -e 'undef $/; $_ = <>; s/\s+\z/\n/; print' 

(To będzie zorch arbitralne spływu whitespace znaki, nie tylko nowymi liniami To prawie na pewno to, co chcesz.).

11

Można:

perl -pe 'chomp if eof' file1 > file2 

Przykład:

$ cat file1 
abc 
def 
ghi 
$ perl -pe 'chomp if eof' file1 > file2 
$ cat file2 
abc 
def 
ghi$ 
+0

Nie mogę usunąć \ n z pliku, z powyższego skryptu – Jayashri

+4

Uwaga, jeśli 'plik1' jest taki sam jak' plik2', to może usunąć plik . Być ostrzeżonym. Zdarzyło mi się. Na szczęście znałem zawartość. –

+0

Spodziewam się, że to nie zadziała, przynajmniej niezawodnie, ponieważ 'eof' staje się prawdziwe tylko wtedy, gdy próbujesz odczytać * po końcu * pliku, co niekoniecznie miało miejsce w trybie' -pe', gdy ' $ _' to ostatnia linia pliku. – zwol

Powiązane problemy