• 締切済み

awkを使用して整形

awkを使用してデータを整形しようとしているのですが うまくいきません・・・ 元データは 10:00:00 disk1 10 disk2 15 disk4 14 10:00:05 disk1 13 disk3 20 10:00:10 disk1 30 の様になっており整形後は 10:00:00 disk1 10 10:00:00 disk2 15 10:00:00 disk3 0 10:00:00 disk4 14 10:00:05 disk1 13 10:00:05 disk2 0 10:00:05 disk3 20 10:00:05 disk4 0 10:00:10 disk1 30 10:00:10 disk2 0 10:00:10 disk3 0 10:00:10 disk4 0 の様に2列目の項目数がdisk1~4まで不足部分が埋まるようにし 不足していた部分の1列目には時間、3列目には0で埋めたいとおもっています。 数万行を処理する必要があり、手作業では不可能なのですが awkの知識が乏しく実現出来かねている次第です。 どなたかご教示頂けると助かります。よろしくお願いします。

みんなの回答

回答No.1

1回じゃ難しいですね。2回に分けてみました。 cat data.txt | awk \ 'BEGIN { strTIME="00:00:00" } { num=split($0,ARY," ") if (num==3) { strTIME=ARY[1] printf("%s %s %s\n",strTIME,ARY[2],ARY[3]) } if (num==2) { printf("%s %s %s\n",strTIME,ARY[1],ARY[2]) } } END { }' | awk \ 'BEGIN { strTIME="" } { if (strTIME!="" && strTIME!=$1) { for (i=1;i<5;i++) { strDISK="disk" i if (strDATA[strDISK]=="") strDATA[strDISK]="0" printf("%s disk%d %s\n",strTIME,i,strDATA[strDISK]) strDATA[strDISK]="" } } strTIME=$1 strDATA[$2]=$3 } END { for (i=1;i<5;i++) { strDISK="disk" i if (strDATA[strDISK]=="") strDATA[strDISK]="0" printf("%s disk%d %s\n",strTIME,i,strDATA[strDISK]) strDATA[strDISK]="" } }'

syungetu99
質問者

お礼

ありがとうございます。 無事にデータの整形を行うことができました。 本当助かりました。

関連するQ&A