我有一些旧的 shell 脚本,它们使用 awk 替换名为 awkLog 的文件中的一些标签,以使其更具可读性。当前命令看起来像这样:
awk log.txt -f awkLog > output.txt
目的是该脚本将在 log.txt 中写入数据,例如 cpu 使用情况等,然后它将“解析”数据并按照 awkLog 中指定的顺序将其写入 output.txt。
我寻找了一些替代品,但不幸的是我没有 shell 脚本编写经验...我发现有些替代品正在使用命令 cut。但我不知道如何在 shell 脚本中实现这一点。
awkLog的代码:
BEGIN { maxfree = 0
minfree = 10000000000 }
{ savailable += $1
sused += $2
sfree += $3
sshared += $4
sbuff += $5
if ( $3 > maxfree ) maxfree = $3
if ( $3 < minfree ) minfree = $3 }
END { print "MEMORY"
mavailable = savailable/NR
print "(average) available : ", mavailable
print "average used : ", sused/NR
print "average free : ", sfree/NR
print "average shared : ", sshared/NR
print "average buff : ", sbuff/NR
print "free max : ", maxfree
print "free min : ", minfree
print "Minimum MEMORY usage : ", mavailable-maxfree, "K"
print "Maximum MEMORY usage : ", mavailable-minfree, "K"
print "Average MEMORY usage : ", mavailable-sfree/NR, "K" }
在 log.txt 中,它看起来像这样:
User 1%, System 3%, IOW 0%, IRQ 0%
User 6 + Nice 0 + Sys 14 + Idle 420 + IOW 0 + IRQ 0 + SIRQ 0 = 440
PID PR CPU% S #THR VSS RSS PCY UID Name
10488 3 2% R 1 3704K 1248K fg shell top
答案1
我从你的问题中了解到,你想替换文件中的字符串。如果是这样,sed
这是更好的命令。
sed -i 's/oldString/newString/g' log.txt