无法在 bash 脚本中打印 awk'ed 数据

无法在 bash 脚本中打印 awk'ed 数据

我正在将数据转储到 csv 文件 (my_datum_file.csv) 中。这内容都是逗号分隔的,我想找到最后的第四个参数的实例(即打印的有关 MX3、TMX、MSV 等的数据的最后一个实例)。第 5 个参数是第 4 个参数的“子类”(即 TMX 有 098 和 001)。同样重要的是,第七个参数是“status”而不是“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"其中 as是forMID中新给定的变量名称,它是一个 shell 变量awk$machine_ID
  • -v MNR="$machine_number"类似地,-v重新分配一个awk名为 as 的变量,MNR称为一个 shell 变量$machine_number
  • ( $4 == MID )4使第 th 参数与所MID包含的内容相等
  • &&
  • ( $5 == MNR )5使第 th 参数与所MNR包含的内容相等
  • &&
  • ( $7 == "status" )使7第 th 参数等于status
  • {t=$10}10第 th 值赋给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 by后将其作为eger 保存MIDMNR10tprintint/60

相关内容