csvファイルから部分データを読み取り、次のパターンでテキストファイルに書き込むLinuxプログラムを作成する必要があります。
NAME : FROM= -100 -346 -249 -125 TO= -346 -249 -125 100 COLOR= COLOR1 COLOR2 COLOR3 COLOR4
NAMEは固定行になります。
FROMとTOの情報はcsvファイルから取得する必要があります。
色情報は、プログラム自体でハードコーディングされた色の配列です。
以下のcsvデータでは、MIN(-100)の下の最初の値はテキストファイルのFROMの下の最初の値(-100)になります。 Excel MAX列の最後の値(100)は、テキストファイルのTO列の下の最後の値(100)になります。 ExcelのVALUE列の下の値は丸められ、表示されているパターンごとにTOとFROMとして使用されます。
データ、価値、 100,-345.8756, 200,-249.3654, 300,-125.3554, 数、最小、最大 1,-100,-98 93,84,86 98,94,96 99,96,98 100,98,100
答え1
アッ回避策(現在の入力ファイルの場合):
awk 'NR>1 && NR<5{
v=sprintf("%.0f", $2); values=(values)? values FS v : v;
lbl="COLOR"; col_item=lbl""++c; col=(col)? col OFS col_item : col_item
}
NR==6{ from=$2 }
END{
print "NAME :"; print "FROM=",from,values;
print "TO=",values,$3; print "COLOR=",col,lbl""++c
}' file
出力:
NAME :
FROM= -100 -346 -249 -125
TO= -346 -249 -125 100
COLOR= COLOR1 COLOR2 COLOR3 COLOR4
答え2
プログラムawk
:
BEGIN { FS = ","; col = "COLOR1"; i = 1 }
!/^[0-9]/ { next }
$3 == "" {
val = sprintf("%.0f", $2)
data = data ? data OFS val : val
col = col OFS "COLOR" ++i
next
}
$2 < min { min = $2 }
$3 > max { max = $3 }
END {
printf("NAME:\nFROM= %s %s\nTO= %s %s\nCOLOR= %s\n",
min, data, data, max, col)
}
テストしてみてください:
$ awk -f script.awk file.csv
NAME:
FROM= -100 -346 -249 -125
TO= -346 -249 -125 100
COLOR= COLOR1 COLOR2 COLOR3 COLOR4
ファイルの最初の部分と2番目の部分にはより多くのデータ行(列ではない)があり、ファイル内のデータ値と行数だけ行にCOLOR
項目があるとします。出力。COLOR
FROM
TO
ブロックは数字ではなく行をスキップします!/^[0-9]/
。
出力の冗長データは3番目のブロック()によって選択されます$3 == ""
。このブロックは適切な値を持つ文字列をdata
生成します。小数点以下の桁数を指定せずに浮動小数点数を指定する形式をcol
使用して丸めを実行します。sprintf()
最小値と最大値は、入力ファイルの後半の2番目の列の最小値と3番目の列の最大値として選択されます。
このEND
ブロックは結果レポートを印刷します。