Linux: kot z separatorami między plikami


28

W Linuksie, jeśli wpiszesz cat *, otrzymasz coś takiego:

line1 z plik1
line2 z plik1
line1 z plik2
line1 od plik3
line2 z plik3
Line3 od file3

Chciałbym wyświetlić separator między plikami. Coś takiego:
line1 z plik1
line2 z plik1
XXXXXXXXXXXX
line1 z plik2
XXXXXXXXXXXX
line1 z plik3
line2 z plik3
Line3 od file3

Czy jest to łatwo możliwe przy użyciu jednowarstwowego pisania na pamięć?

Odpowiedzi:


40

Jeśli nie jesteś zbyt wybredny co do wyglądu separatora:

tail -n +1 *

To jest świetne! Jestem zaskoczony, jak różni się twoje polecenie od ogona -n 1 *. Nie mogę znaleźć żadnej wzmianki o działaniu +1 (rathen niż 1) na stronie man.
Daniele,

1
tail -n Xpokazuje ostatnie X linii. tail -n +Xzaczyna się od linii X, zaczynając od 1 , tzn. pokazuje wszystkie linie oprócz pierwszej (X-1).
Gilles „SO- przestań być zły”

Ach, teraz widzę to na stronie podręcznika. Przeoczyłem to. Świetnie, wielkie dzięki
Daniele,

Podobne rozwiązania znajdują się w tym artykule: everythingsysadmin.com/2012/09/unorthodoxunix.html
TomOnTime

Przepraszam za zły komentarz, ale to jest niesamowite. Dziękuję, @Gilles
Mike D


11
awk 'FNR==1 && NR!=1 {print "XXXXXXXXXXXX"}{print}' *

Lub

awk 'FNR==1 {print "XXXXXX", FILENAME, "XXXXXX"}{print}' *

Lub

awk 'FNR==1 {print "XXXXXX File no. " ++count, "XXXXXX"}{print}' *

Używając tylko Bash (nie cat):

for file in *; do printf "$(<"$file")\nXXXXXXXXXXXX\n"; done

Edytować:

W AWK 4:

awk 'BEGINFILE {print "XXXXXXXXXXXX"}{print}' *

Możesz użyć dowolnego separatora, takiego jak te z innych przykładów w tej odpowiedzi. Jeśli chcesz separator na końcu każdego pliku, zmień BEGINFILEna ENDFILE. Może nadal pojawiać się na początku skryptu, ponieważ jest warunkowy (zamiast sugerować kolejność wykonywania).


2
+1 za awk! Przysięgam, że może zrobić wszystko ...
Brad
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.