Bashスクリプトからawk'edデータを印刷できません

Bashスクリプトからawk'edデータを印刷できません

データをcsvファイル(my_datum_file.csv)にダンプしています。これコンテンツすべてコンマで区切られています。探したいです。最後4番目のパラメータのインスタンス(つまり、MX3、TMX、MSVなどについて印刷されたデータの最後のインスタンス)。 5番目のパラメーターは4番目のパラメーターの「サブクラス」です(つまり、TMXには098と001があります)。 7番目のパラメータが「SVlts」ではなく「状態」であることも重要です。尋ねる:10番目の値(分単位の時間)を時間に変換したいと思います。この値を印刷したいです。

だから私はターミナルで次のように書きました。

$ cat /home/ed/start_up_job/my_datum_file.csv | awk -F, '( $4 == "TMX" ) && ( $5 == "098" ) && ( $7 == "status" ) {print $10/60}' | tail -1`'

最終結果は1022.25時間です。これは素晴らしい結果です。

私はこれを一般的な小さなbashスクリプトに含めました。

#!/bin/bash

machine_ID="$1"
machine_number="$2"

echo "$1 $2 hours is `awk -F, -v MID="$machine_id" -v MNR="$machine_number" '( $4 == MID ) && ( $5 == MNR ) && ( $7 == "status" ) {t=$10} END{print int(t/60)}' /home/ed/start_up_job/my_datum_file.csv`"

したがって、端末でbashスクリプトを呼び出すと、$ ./myscript.txt TMX 098次のような出力が表示されます。TMX 098 hours is: 0 予想される出力は次のとおりです。TMX 098 hours is: 1022.25

何が問題なのかわかりませんか?

答え1

cat端末で使用したものを交換してawk -F, -v MID="$machine_ID" -v MNR="$machine_number" '( $4 == MID ) && ( $5 == MNR ) && ( $7 == "status" ) {t=$10} END{print int(t/60)}' /home/ed/start_up_job/my_datum_file.csv動作しました。

コードについて:

  • awk -Fフィールド区切り文字を次のように定義します。,
  • -vプログラム変数に値を割り当てる
  • MID="$machine_ID"ここで、asMIDはシェル変数forに新しく与えられた変数名です。awk$machine_ID
  • -v MNR="$machine_number"同様に、asという名前の変数を-v再割り当てすることをシェル変数と呼びます。awkMNR$machine_number
  • ( $4 == MID )4番目の引数MIDを含めたものと同じにします。
  • &&そして
  • ( $5 == MNR )5番目の引数MNRを含めたものと同じにします。
  • &&そして
  • ( $7 == "status" )7次のパラメータを次のようにしてください。status
  • {t=$10}10番目の値を次に割り当てます。t
  • ENDすべての入力を読み込んだ後に一度実行されるルールです。
  • print int(t/60)印刷物t/60 (前に$記号はありませんt。)intエガーとして
  • /home/ed/start_up_job/my_datum_file.csvファイルから〜

デフォルトでは、ファイルでは、このコードは/home/ed/start_up_job/my_datum_file.csv合計を含む値を探します。その後、コードは[$]番目のパラメータの値を入力し、ingの後にそれをegerとして保存します。MIDMNR10tprintint/60

関連情報