Bash 脚本输出格式

Bash 脚本输出格式,bash,shell,Bash,Shell,我有一个需要格式化的脚本输出数据,我有一个如下输出 UNIT : ABC xxxx xxxx Free memory : xxx 70 UNIT : DEF xxxx xxxx Free memory : xxx 60 我需要捕获单个单元的可用内存数据,但我无法打印出来,有什么建议吗?大约有25个单元&我必须单独打印所有单元的免费内存 这里的“xxxxx”是一些与我无关的随机数据,我想要的是打印每个单元的空闲内存,格式如下:轻微的微笑 ABC 70 DEF 60 依此类推。让文件outpu

我有一个需要格式化的脚本输出数据,我有一个如下输出

UNIT : ABC
xxxx
xxxx
Free memory : xxx 70

UNIT : DEF
xxxx
xxxx
Free memory : xxx 60
我需要捕获单个单元的可用内存数据,但我无法打印出来,有什么建议吗?大约有25个单元&我必须单独打印所有单元的免费内存

这里的“xxxxx”是一些与我无关的随机数据,我想要的是打印每个单元的空闲内存,格式如下:轻微的微笑

ABC 70
DEF 60

依此类推。

让文件
output.txt
包含输出

然后假设输出中单位和可用内存的顺序不改变,我们可以尝试以下方法

cat output.txt | grep -Ea 'UNIT|Free memory' | sed -e ':a;N;s/\nFree/ Free/g' | awk '{print $3" "$8}'
输出:

ABC 70
DEF 60
说明:

ABC 70
DEF 60
  • grep-Ea'UNIT | Free memory'
    :这将仅grep出包含UNITFree memory的行
  • sed-e:a;Ns/\nFree/Free/g'
    :这将在每一行中循环,只要新行以Free开头,新行将替换为空格。因此,我们将在一行中获得单元空闲内存
  • awk'{print$3”“$8}'
    :这进一步切断了单元名称空闲内存值的位置

希望有帮助。

使用GNU
sed

/path/to/your/script |
sed -n -E '/^UNIT\s*:\s*/{s///;h}; /^Free memory\s*:.*\s([0-9]+)$/{s//\1/;H;g;s/\n/ /p}'

使用GNU
ed

如果它是一个文件

ed-s file.txt

如果输出来自脚本,则需要支持
的shell,只需将脚本的输出发送到此awk命令:

Your_Script | awk '
/^UNIT/ {printf $NF" "}
/^Free memory/ {print $NF}
'

你能展示你的剧本吗?它可以被改变吗?或者在脚本执行后必须这样做?那么你尝试了什么?对于
awk
,这应该很简单。从脚本正在格式化的任何数据中提取这一点会更容易,或者至少让脚本提供一种更易于机器解析的输出格式作为选项。这必须在脚本执行后完成,这里的问题是单元和该单元的可用内存不在同一行,所以格式化有点困难。