czy podczas dostosowywania wielu plików jednocześnie, jak pokazano poniżej, czy jest jakiś sposób, aby pokazać nazwę pliku na początku każdej linii?
tail -f one.log two.log
prąd wyjściowy
==> one.log <==
contents of one.log here...
contents of one.log here...
==> two.log <==
contents of one.log here...
contents of two.log here..
Szukasz czegoś podobnego
one.log: contents of one.log here...
one.log: contents of one.log here...
two.log: contents of two.log here...
two.log: contents of two.log here...
-v
opcję (pełną) ogona. To może nie do końca pasować do twojego zapytania, ale jest początkiem.Odpowiedzi:
\ dzięki {don_cristti}
źródło
awk
rozwiązanie joojoo działa!Krótka odpowiedź
GNU Parallel ma zestaw fajnych opcji, które sprawiają, że naprawdę łatwo jest robić takie rzeczy:
Dane wyjściowe będą:
Więcej wyjaśnień
--tagstring=str
każdą linię wyjściową ciągiem str . Zeparallel
strony podręcznika :Wszystkie wystąpienia
{}
zostaną zastąpione argumentami równoległymi, które w tym przypadku są nazwami plików dziennika; tj.one.log
itwo.log
(wszystkie argumenty po:::
).Opcja
--line-buffer
jest wymagana, ponieważ wyjście polecenia (np.tail -f one.log
Lubtail -f two.log
) zostanie wydrukowane, jeśli polecenie to zostanie zakończone. Ponieważtail -f
będzie czekać na powiększenie pliku, konieczne jest wydrukowanie danych wyjściowych w trybie liniowym, który to--line-buffer
robi. Znów zeparallel
strony man :źródło
Jeśli
tail
nie jest to obowiązkowe, możesz użyćgrep
do osiągnięcia tego:Spowoduje to wydrukowanie nazwy pliku jako prefiksu każdej linii wyjściowej.
Dane wyjściowe ulegają awarii, jeśli zostaną
*.log
rozwinięte tylko do jednego pliku. Pod tym względem:źródło
tail -f
niegrep
.--with-filename
lub-H
zawsze wymusić dodanie nazwy pliku.awk
rozwiązania lubparallel
które nie jest zainstalowane.Moim pomysłem byłoby utworzenie jednego pliku ze scalonymi dziennikami z kilku plików, jak ktoś tutaj zasugerowany i dodanie nazw plików:
źródło
Coś z
xargs
ised
może działać:źródło