Buna değecekse, bunu çok sık yapmam gerekiyor ve kullanım şeklini asla hatırlayamıyorum while IFS= read...
, bu yüzden bash profilimde şu işlevi tanımladım:
# 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
}
Bu işlev ilk önce dosyadaki satır sayısını belirler, ardından sed
satırdan sonra satır ayıklamak için kullanır ve her satırı, verilen herhangi bir işleve tek bir dize argümanı olarak iletir. Sanırım bu büyük dosyalarda gerçekten verimsiz olabilir, ancak bu benim için şu ana kadar bir sorun olmamıştır (elbette bu hoşgeldin nasıl geliştirileceği üzerine öneriler).
Kullanımı oldukça tatlı 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
<
bütün bir döngüye girebileceğini bilmiyordum . Şimdi her ne kadar mantıklı gelse de gördüm