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):
awk 'ENDFILE { if (FNR == 0) printf("\n") >>FILENAME }' 2[0-8]_SumActive.txt
ENDFILE
Blok zostanie wykonana po zakończeniu czytania żadnych plików. Jeśli FNR
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
zamiast cat
:
awk 'ENDFILE { if (FNR == 0) printf("\n") } 1' 2[0-8]_SumActive.txt
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):
for name in ./2[0-8]_SumActive.txt; do
if [ -s "$name" ]; then
cat "$name"
else
printf '\n'
fi
done
-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łaniami printf
powyżej (będzie to również działać w awk
kodzie).