while read
लूप का उपयोग करें :
: > another_file ## Truncate file.
while IFS= read -r LINE; do
command --option "$LINE" >> another_file
done < file
एक और ब्लॉक द्वारा आउटपुट को रीडायरेक्ट करना है:
while IFS= read -r LINE; do
command --option "$LINE"
done < file > another_file
अंतिम फ़ाइल खोलने के लिए है:
exec 4> another_file
while IFS= read -r LINE; do
command --option "$LINE" >&4
echo xyz ## Another optional command that sends output to stdout.
done < file
यदि कोई कमांड इनपुट पढ़ता है, तो इनपुट के लिए दूसरे fd का उपयोग करना एक अच्छा विचार होगा, इसलिए कमांड इसे नहीं खाएंगे (यहां मान लें ksh
, zsh
या इसके bash
लिए -u 3
, <&3
इसके बजाय उपयोग करें )
while IFS= read -ru 3 LINE; do
...
done 3< file
अंत में तर्क स्वीकार करने के लिए, आप कर सकते हैं:
#!/bin/bash
FILE=$1
ANOTHER_FILE=$2
exec 4> "$ANOTHER_FILE"
while IFS= read -ru 3 LINE; do
command --option "$LINE" >&4
done 3< "$FILE"
जो एक के रूप में चला सकता है:
bash script.sh file another_file
अतिरिक्त विचार। bash
उपयोग के साथ readarray
:
readarray -t LINES < "$FILE"
for LINE in "${LINES[@]}"; do
...
done
ध्यान दें: IFS=
यदि आपको लाइन मानों को अग्रणी और अनुगामी स्थानों की छंटनी करने का मन नहीं है तो छोड़ा जा सकता है।
<file xargs -L 1 -I{} command --option {} other args