次のCSVファイルがあります。
miami,20,in
lansing,2,cm
austin,3,mm
chicago,5,miles
phoenix,2,feet
最初のフィールドは名前、次のフィールドは値、3番目のフィールドは単位を表します。現在データセット内のすべての単位を一覧表示しますが、データセットが時間の経過とともに変化し、他の測定単位が必要になると予想するため、これらの単位に限定されません。
すべての値が共通の単位(インチ)に変換され、名前で一覧表示されるように、このCSVファイルをスクリプトで処理できるようにしたいです。したがって、次のようにする必要があります。
miami,20
lansing,0.78740157
austin,0.11811024
chicago,316800
phoenix,24
units
私のデータにはメートル法単位と英国単位が混在しているので、単位変換のために探していたものと正確に一致する単位変換ツールがあることがわかりました。
たとえば、データの最後の行をインチに変換するには、次のようにします。
units 2cm in -t
これが私に与えるでしょう
0.78740157
現在私が探している助けは、スクリプトでこのコマンドを使用し、私が説明した形式(2番目のコードブロック)で出力する方法です。 CSV データは、現在$citydata
bash スクリプトから呼び出される変数に保存されています。現在は文字列です。
ベストアンサー1
これは線形ですアッ注文する:
$ awk -F, '{system("printf " $1 ",;units " $2$NF " in -t ")}' file
miami,20
lansing,0.78740157
austin,0.11811024
chicago,316800
phoenix,24
system
このコマンドは、コマンド内で別のシェルコマンドを呼び出しますawk
。したがって、最初にSCVファイルの最初のフィールドが印刷され、"printf " $1 ",
その後にカンマが続き、次に2,
番目と最後のフィールドがinputとしてコマンドが呼び出されますunits
。$2
$NF
ノートsystem
命令を使いたいawk
ときあなたはする必要がありますこれらのコマンドとそのオプションは、awk
その中のオプションを除いて二重引用符で囲みます。