変数置換を使用した区切り文字列の分割

変数置換を使用した区切り文字列の分割

「#」で区切られた行があり、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

おすすめ記事