配列で使用するために文字列値をインデックス値に変更するには?

配列で使用するために文字列値をインデックス値に変更するには?

配列で使用するために文字列をインデックスに変更しようとしましたが、機能しません。

これは私のファイルです。

$ cat file1.txt
101,Harish,BAN
102,Srinu,HYD

このコードは:

#!/bin/bash
IFS=','
while read line
do
    DELIM_REMOVE=`echo $line|sed 's/,/ /g'`
    V=($DEL_REMOVE)
    echo ${DELIM_REMOVE}
        for i in "${!V[@]}"; do
            printf 'V[%s] = %s\n' "$i" "${V[i]}"
                echo "${V[i]}"
        done
done < /home/ec2-user/file1.txt
echo "${V[i]}"

また、別のループで動的に生成された変数を使用する必要があります。

ベストアンサー1

テキストを処理するためにシェルループを使用しないでください、テキスト処理ユーティリティを使用します。

awk -F, '{for (i = 0; i < NF; i++) printf "v[%d] = %s\n", i, $(i+1)}' < file1.txt

もしあなたなら持つループを使用すると、bash次のように書くことがより合理的です。

while IFS=, read -ra v; do
  for i in "${!v[@]}"; do
    printf 'v[%d] = %s\n' "$i" "${v[i]}"
  done
done < file1.txt

知っておくべきこと最後のフィールドが空の場合はスキップします。

おすすめ記事