इसके लायक होने के लिए, मुझे ऐसा करने की आवश्यकता है, और इसका उपयोग करने का सही तरीका कभी भी याद नहीं रख सकता है while IFS= read...
, इसलिए मैंने अपने bash प्रोफाइल में निम्नलिखित फ़ंक्शन को परिभाषित किया है:
# iterate the line of a file and call input function
iterlines() {
(( $# < 2 )) && { echo "Usage: iterlines <File> <Callback>"; return; }
local File=$1
local Func=$2
n=$(cat "$File" | wc -l)
for (( i=1; i<=n; i++ )); do
"$Func" "$(sed "${i}q;d" "$File")"
done
}
यह फ़ंक्शन पहले फ़ाइल में लाइनों की संख्या निर्धारित करता है, फिर sed
लाइन के बाद लाइन निकालने के लिए उपयोग करता है, और प्रत्येक लाइन को किसी भी फ़ंक्शन के लिए एकल स्ट्रिंग तर्क के रूप में पास करता है। मुझे लगता है कि यह बड़ी फ़ाइलों के साथ वास्तव में अक्षम हो सकता है, लेकिन यह मेरे लिए अब तक एक समस्या नहीं है (इस पाठ्यक्रम के स्वागत में सुधार करने के बारे में सुझाव)।
उपयोग बहुत प्यारा है IMO:
>> cat example.txt # note the use of spaces, whitespace, etc.
a/path
This is a sentence.
"wi\th quotes"
$End
>> iterlines example.txt echo # preserves quotes, $ and whitespace
a/path
This is a sentence.
"wi\th quotes"
$End
>> x() { echo "$#"; }; iterlines example.txt x # line always passed as single input string
1
1
1
1
1
<
एक पूरे लूप में जा सकता है । हालांकि यह पूरी तरह से समझ में आता है अब मैंने इसे देखा