私は次のような結果に到達するために、次のファイルを使用している次のように 2番目のファイルをAWKまたは他の方法で処理しているときに、1つのファイルからデータのリストを持つ配列を渡すにはどうすればよいですか?
私はこの結果に到達するために使用しているコマンドは次のとおりです。
awk -F"\t" '(FNR>1)&&(NR==FNR){map[$1]=$4; next}($1 in map){$3=substr($3,2); for(i=4;i<7;i++){$i=($i*map[$1])}; print $0}' file2.txt file1.txt
このコマンドは限り正常に動作しますJanからMarまでの列のデータは同じですが、データが異なる場合はmap[$1]=$4
のために問題が発生します。つまり、私は4列目の値を渡すだけです。 1月から3月までのすべての値を渡し、別のファイルの対応する値を掛けたいと思います。
私は、次のコードを試してみました:
awk -F"\t" '(FNR>1)&&(NR==FNR){{map[$1]=$0}; next}($1 in map){$3=substr($3,2); for(i=4;i<7;i++){split(map[$1],val);$i=($i*val[$i])}; print $0}' file2.txt file1.txt
行全体を送信し、内部的に分割します。 私もマップに直接配列を渡す試してみました:
awk -F"\t" '(FNR>1)&&(NR==FNR){split($0,val); for(i=4;i<7;i++){map[$1][$i]=val[$i]}; print map[$1][$i]; next}($1 in map){$3=substr($3,2); for(i=4;i<7;i++){$i=($i*(map[$1][$i]))}; print $0}' file2.txt file1.txt
私はこのquestion.Iに答えを得るために他の方法を使用して気にしない考えていた、我々はとにかく内部のawkコマンドを実行する必要があります別のawkコマンド? 最終編集:
awk -F"\t" '(FNR>1)&&(NR==FNR){map[$1]=$0; next}($1 in map){split(map[$1],temp);$3=substr($3,2); for(i=4;i<7;i++){$i=($i*temp[i])/12}; print $0}' file2.txt file1.txt
これは私の場合で働いていたものです。
サンプルデータがあれば、最初の出力行は625回でなければなりませんか? (50×150/12 = 625)。そうですか? – Borodin
例を整数値の5列に減らすと、質問を読むのにもっと多くの人々が関心を集めます。現在、ほとんどの人が喜んで受け入れるよりもはるかに多くの努力をすることなく、木の木を見ることができません。 –
浮動小数点値をすべて小数点に変更しました。あまりにも?あなたは 'データが違うとき'と言う - どのデータですか?別の方法は?あなたはそれが '問題を生み出す 'と言っています - どのような問題ですか?コアダンプ、構文エラー、間違った出力、出力なし、別の何か?あなたが知っていることを知らずにあなたが書いたことを読んだり、あなたの質問や問題を明確に述べるためにあなたの質問を編集したりするために少し努力してください。あなたはほとんど確かに解決するための非常に単純な問題を抱えていますが、それがまだ何か分かっていません! –