以下のように開始番号と終了番号を持つファイルがあります。
Start,end,code
43786,67883,avb
200,400,add
12,14,adf
ただし、始まりと終わりの間のすべての数字がそのコードで書かれるように書き直す必要があります。
43786,Avb
43787,avb
43788,avb
43789,avb
最後の67883まで、avbは範囲内にあり続けます。
200,add
201,add
202,add
答え1
次のようなもので十分です。
awk 'BEGIN{FS=OFS=","}{for(i=$1;i<=$2;i++) print i,$3}' input_file > output_file
ファイルに印刷する必要のないヘッダーがある場合:
awk 'BEGIN{FS=OFS=","}NR>1{for(i=$1;i<=$2;i++) print i,$3}' input_file > output_file
答え2
perl -F, -lane '$. > 1 and print "$_,$F[2]" for $F[0] .. $F[1]'
perl -F, -lane '$. == 1 && next, print "$a,$F[2]" while ($a=$F[0]++) <= $F[1]'
while IFS=, read -r start end str junk; do
case ${v++} in '' ) v=; continue ;; esac
seq -f "%g,$str" $start $end
done
while IFS=, read -r start end str junk; do
case ${v++} in '' ) v=; continue ;; esac
yes "$str" | sed -e "$start,$end!d;=;${end}q" | sed -e 'N;s/\n/,/'
done