减少 Findstr 输出
Reduce Findstr Output
我想减少以下行的输出:
for /F "tokens=10" %a in ('c:\Programme\smartmontools\bin\smartctl.exe -a /dev/hdb ^| findstr /BC:" 9" ') do @echo %a
此行正在从 HDD 或 SSD 中提取开机时间值。
大多数 HDD 或 SSD 都会给我正确的时间,例如:3423 或其他时间。只是简单的值。
不幸的是,一些金士顿固态硬盘具有以下值:197h+00m+00.000s
是否可以将输出减少到 197?
也许用另一个 findstr 管道?
命令必须在同一行 (!) 中,例如:
这行不通,但我希望它能解释我的意思。
for /F "tokens=10" %a in ('c:\Programme\smartmontools\bin\smartctl.exe -a /dev/hdb ^| findstr /BC:" 9" | findstr [0-9][0-9]?[0-9]?[0-9]?[0-9]?') do @echo %a
抱歉我的英语不好!!
findstr
可以找到包含某个字符串的行,但不能修改该行。
您可以添加另一个 for
来执行您想要的操作:
@for /F "tokens=10" %a in ('@c:\Programme\smartmontools\bin\smartctl.exe -a /dev/hdb ^| findstr /BC:" 9" ') do @for /f "delims=h" %b in ("%a") do @echo %b
(未验证,因为我没有此实用程序)
看起来 Zabbix 不喜欢第二个堆叠。由于典型的(缩短的)smartctl 输出如下所示:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x002f 120 099 --- Pre-fail Always - 235885189
3 Spin_Up_Time 0x0023 098 097 --- Pre-fail Always - 0
4 Start_Stop_Count 0x0032 100 100 --- Old_age Always - 442
5 Reallocated_Sector_Ct 0x0033 100 100 --- Pre-fail Always - 0
7 Seek_Error_Rate 0x002f 085 060 --- Pre-fail Always - 347745957
9 Power_On_Hours 0x0032 075 075 --- Old_age Always - 197h+00m+00.000s
您可以更改第一个 for /f
以包含字母 h
作为分隔符,因为该行没有其他小写字母 h。所以
for /F "tokens=10delims=h " %a in ('c:\Programme\smartmontools\bin\smartctl.exe -a /dev/hdb ^| findstr /BC:" 9" ') do echo %a
应该输出:
197
我想减少以下行的输出:
for /F "tokens=10" %a in ('c:\Programme\smartmontools\bin\smartctl.exe -a /dev/hdb ^| findstr /BC:" 9" ') do @echo %a
此行正在从 HDD 或 SSD 中提取开机时间值。
大多数 HDD 或 SSD 都会给我正确的时间,例如:3423 或其他时间。只是简单的值。
不幸的是,一些金士顿固态硬盘具有以下值:197h+00m+00.000s
是否可以将输出减少到 197?
也许用另一个 findstr 管道?
命令必须在同一行 (!) 中,例如: 这行不通,但我希望它能解释我的意思。
for /F "tokens=10" %a in ('c:\Programme\smartmontools\bin\smartctl.exe -a /dev/hdb ^| findstr /BC:" 9" | findstr [0-9][0-9]?[0-9]?[0-9]?[0-9]?') do @echo %a
抱歉我的英语不好!!
findstr
可以找到包含某个字符串的行,但不能修改该行。
您可以添加另一个 for
来执行您想要的操作:
@for /F "tokens=10" %a in ('@c:\Programme\smartmontools\bin\smartctl.exe -a /dev/hdb ^| findstr /BC:" 9" ') do @for /f "delims=h" %b in ("%a") do @echo %b
(未验证,因为我没有此实用程序)
看起来 Zabbix 不喜欢第二个堆叠。由于典型的(缩短的)smartctl 输出如下所示:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x002f 120 099 --- Pre-fail Always - 235885189
3 Spin_Up_Time 0x0023 098 097 --- Pre-fail Always - 0
4 Start_Stop_Count 0x0032 100 100 --- Old_age Always - 442
5 Reallocated_Sector_Ct 0x0033 100 100 --- Pre-fail Always - 0
7 Seek_Error_Rate 0x002f 085 060 --- Pre-fail Always - 347745957
9 Power_On_Hours 0x0032 075 075 --- Old_age Always - 197h+00m+00.000s
您可以更改第一个 for /f
以包含字母 h
作为分隔符,因为该行没有其他小写字母 h。所以
for /F "tokens=10delims=h " %a in ('c:\Programme\smartmontools\bin\smartctl.exe -a /dev/hdb ^| findstr /BC:" 9" ') do echo %a
应该输出:
197