cat
डेटा को आउटपुट नहीं कर सकता है जो फाइलों में मौजूद नहीं है। यदि कोई फ़ाइल खाली है, तो आउटपुट के रूप में एक खाली लाइन प्रदान करने के लिए उसके पास कोई नई पंक्ति वर्ण भी नहीं है।
आप यह सुनिश्चित कर सकते हैं कि फाइलों में कम से कम एक नई लाइन वर्ण हो।
यह awk
सुनिश्चित करने के लिए कि आप GNU का उपयोग कैसे करते हैं (यह खाली फ़ाइलों को संशोधित करता है):
awk 'ENDFILE { if (FNR == 0) printf("\n") >>FILENAME }' 2[0-8]_SumActive.txt
ENDFILE
ब्लॉक से किसी भी फ़ाइल को पढ़ने के खत्म करने के बाद निष्पादित किया जाएगा। यदि FNR
शून्य है, तो हमने फ़ाइल में कभी भी कोई रेखा नहीं देखी है, इसलिए हम इसमें एक नई पंक्ति सम्मिलित करते हैं। फिर स्क्रिप्ट अगली फ़ाइल के साथ जारी रहती है।
आप तब उपयोग कर सकते हैं cat
जैसा आपने प्रश्न में किया था।
वैकल्पिक रूप से, फ़ाइल में बदलाव जीएनयू का उपयोग किए बिना awk
के बजाय cat
:
awk 'ENDFILE { if (FNR == 0) printf("\n") } 1' 2[0-8]_SumActive.txt
यह ऊपर की तरह खाली फाइलों का पता लगाने का काम करता है, लेकिन फाइल की बजाए नई आउटपुट को मानक आउटपुट पर प्रिंट करता है। 1
अंत में द्वारा प्रतिस्थापित किया जा सकता है { print }
और गैर खाली फ़ाइलों में सभी डेटा outputted जा करने के लिए कारण होगा।
वैकल्पिक रूप से, एक शेल लूप (किसी भी POSIX शेल में काम करना चाहिए):
for name in ./2[0-8]_SumActive.txt; do
if [ -s "$name" ]; then
cat "$name"
else
printf '\n'
fi
done
-s
परीक्षण सच हो सकता है अगर फ़ाइल मौजूद है और शून्य से अधिक का आकार अधिक से अधिक है।
यदि आप चाहते हैं कि शाब्दिक स्ट्रिंग [Blank]
को खाली फ़ाइलों के लिए आउटपुट किया जाए, तो बस ऊपर दिए \n
गए कॉल में उस स्ट्रिंग को डालें printf
(यह awk
कोड में भी काम करेगा )।