「#」で区切られた行があり、3つのフィールドを含むサンプルファイルがあります。
A#B#C
D#E#F
次の代わりに、UNIX変数置換を使用して行の各フィールド値を取得できますか?
cat file | while read a; do
f1=`echo $a | cut -d# -f1`
f2=`echo $a | cut -d# -f2`
f3=`echo $a | cut -d# -f3`
done
ベストアンサー1
これが意味する場合は、パラメータ拡張を使用できます。しかし、読むのは簡単ではありません。
while read a; do
# comments are for the first line A#B#C
f1f2=${a%#*} # remove suffix #C -> A#B
f1=${f1f2%#*} # remove suffix #B -> A
f2=${f1f2#*#} # remove prefix A# -> B
f3=${a##*#} # remove longest prefix: A#B# -> C
echo "$f1,$f2,$f3" # do something with f1,f2,f3
done < file
IFS=#
内部フィールド区切り変数を設定し、各行を3つの変数に分割する方が簡単です。
while IFS=# read f1 f2 f3; do
echo "$f1,$f2,$f3" # do something with f1,f2,f3
done < file