Mam listę plików.txt poniżej:
-rw-rw-r-- 1 root dev 11 May 16 12:18 20_SumActive.txt
-rw-rw-r-- 1 root dev 11 May 16 12:18 22_SumActive.txt
-rw-rw-r-- 1 root dev 7 May 16 12:18 24_SumActive.txt
-rw-rw-r-- 1 root dev 0 May 16 12:18 26_SumActive.txt
-rw-rw-r-- 1 root dev 0 May 16 12:18 28_SumActive.txt
Wynik:
kpgmeddev01> cat 2[0-8]_SumActive.txt
Sum: 47760
Sum: 72000
Sum: 0
Jak uzyskać wynik, jak poniżej:
Sum: 47760
Sum: 72000
Sum: 0
[Blank]
[Blank]
Potrzebujesz wskazówek.
command-line
solaris
Kilka
źródło
źródło
[Blank]
na myśli te 7 znaków, czy chciałeś wskazać pustą linię?Odpowiedzi:
cat
nie może wyprowadzać danych, które nie istnieją w plikach. Jeśli plik jest pusty, nie ma nawet znaku nowego wiersza, aby zapewnić pusty wiersz jako wynik.Możesz upewnić się, że pliki zawierają co najmniej jeden znak nowej linii.
Oto jak używasz GNU,
awk
aby upewnić się, że (to modyfikuje puste pliki):ENDFILE
Blok zostanie wykonana po zakończeniu czytania żadnych plików. JeśliFNR
wynosi zero, nigdy nie widzieliśmy żadnych linii w pliku, więc wstawiamy do niego pojedynczą linię. Następnie skrypt kontynuuje pracę z następnym plikiem.Następnie możesz użyć,
cat
tak jak w pytaniu.Alternatywnie, bez zmiany plików, używając GNU
awk
zamiastcat
:Robi to samo wykrywanie pustych plików, jak powyżej, ale drukuje nowy wiersz na standardowym wyjściu, a nie na pliku. Na
1
końcu można zastąpić{ print }
i spowoduje, że wszystkie dane w niepustych plikach zostaną wyprowadzone.Alternatywnie, pętla powłoki (powinna działać w dowolnej powłoce POSIX):
-s
Badanie będzie mogło być prawdziwe, jeśli plik istnieje i ma rozmiar większy niż zero.Jeśli chcesz, aby dosłowny ciąg znaków
[Blank]
był wyprowadzany dla pustych plików, po prostu wstaw ten ciąg przed\n
wywołaniamiprintf
powyżej (będzie to również działać wawk
kodzie).źródło
Z
perl
Który dodaje znak nowego wiersza, jeśli go brakuje na końcu, więc wyświetlałby pusty wiersz dla pustych plików, ale także dodawałby nowy wiersz dla niepustych plików, które nie trafiają (i kończyłby się konkatenacją w jednym wierszu z
cat
).źródło
(Nie jest to dokładnie to, o co pytasz, ale :) W tego typu sytuacjach wolę używać
head
Zwykle tego właśnie chcesz. Jeśli nie, łatwo
sed
będzie późniejźródło
Z
xargs
igrep
możesz spróbować czegoś takiego:źródło
Zakładając, że
[Blank]
masz na myśli dosłowne puste linie, powinno to działać:źródło
Możesz przetestować każdy plik, aby sprawdzić, czy ma zerową długość, zanim spróbujesz wyświetlić jego zawartość:
Użyłem
awk 1 "$f"
zamiast tego,cat "$f"
ponieważawk
gwarantuje zakończenie pliku z nową linią.W swoim pytaniu, jeśli chciałeś,
[blank]
aby nie był to dosłowny, a jedynie pusty wiersz, możesz to zaimplementować za pomocą powyższego kodu i usunąć'[Blank]'
z końcaecho
instrukcji.źródło
Zakładam, że twoje pliki 26_SumActive.txt i 28_SumActive.txt są puste i potrzebujesz pustych linii podczas wyświetlania ich zawartości
W tym celu możesz po prostu iterować listę plików i cat ich zawartość, a jeśli plik jest pusty, wyświetl pustą linię.
[ -s FILE ]
Prawda, jeśli PLIK istnieje i ma rozmiar większy niż zero.źródło
if [ -s $i ]; then cat $i; else echo -e ""; fi;
. Nadal +1 do prostego testu przy użyciu tylko standardowej funkcjonalności powłoki.cat "$i"; test -s "$i" || echo
- nie potrzeba nieporęcznychif
lub nieprzenośnychecho
flag.gdzie - umożliwi kotowi odczyt ze standardowego wejścia.
Po wyświetleniu zawartości twoich plików kot będzie czekał na twoje dane wejściowe. Możesz wprowadzić żądane dane, naciskając Enter, aby uzyskać dosłowne spacje lub [Puste], jeśli chcesz. Po każdym wciśnięciu Enter wejdź, po wprowadzeniu wszystkich danych naciśnij ^ D (Ctrl + D) i gotowe.
PS: Dla każdego wejścia otrzymasz odpowiednie wyjście.
Dzięki temu możesz umieszczać puste miejsca lub coś innego, między dwiema sekwencjami wyjść.
źródło
cat
jako rozwiązanie i pozwolić OP na to, czego chcą.