catnie 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, awkaby upewnić się, że (to modyfikuje puste pliki):
awk 'ENDFILE { if (FNR == 0) printf("\n") >>FILENAME }' 2[0-8]_SumActive.txt
ENDFILEBlok zostanie wykonana po zakończeniu czytania żadnych plików. Jeśli FNRwynosi 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ć, cattak 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 1koń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
-sBadanie 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 \nwywołaniami printfpowyżej (będzie to również działać w awkkodzie).