私たちは以下のデータを持っています
ABC|RAM|BANGALORE|100,200,300
上記のデータを複数のレコードに分割するためにピボット/ループを実行できますか?
ABC|RAM|BANGALORE|100
ABC|RAM|BANGALORE|200
ABC|RAM|BANGALORE|300
最後の列にカンマ区切り文字を含む複数の値に基づいてレコード数を生成する必要があります。
Linuxシェルでできることはありますか?
ベストアンサー1
私はこれにシェル自体を使用しません。
別のawkの実装
$ awk 'BEGIN{OFS=FS="|"} {split($NF,a,","); for(i in a) {$NF = a[i]; print}}' data
ABC|RAM|BANGALORE|100
ABC|RAM|BANGALORE|200
ABC|RAM|BANGALORE|300
またはミラー
$ mlr --nidx --fs '|' nest --explode --values --across-records --nested-fs ',' -f 4 data
ABC|RAM|BANGALORE|100
ABC|RAM|BANGALORE|200
ABC|RAM|BANGALORE|300
またはよりコンパクト
mlr --nidx --fs '|' nest --evar ',' -f 4 data
もしあなたなら本物シェルを使用してから最近のbashを使用する必要があります。
#!/bin/bash
while IFS='|' read -a fields; do
IFS=',' read -a vals <<<"${fields[ -1]}"
unset 'fields[ -1]'
for v in "${vals[@]}"; do
printf '%s|' "${fields[@]}"
printf '%s\n' "$v"
done
done < data