如何在awk脚本中将0加到少于两位数
How to add 0 to less than two digits in awk script
输入:在x.sh
中的函数trimline中输入以下文字
May 13 00:01:58 BBAOMACBOOKAIR2 com.apple.xpc.launchd[1] (com.apple.mdworker.bundles[12513]): Service exited with abnormal code: 78
May 13 00:02:12 BBAOMACBOOKAIR2 com.apple.xpc.launchd[1] (com.apple.xpc.launchd.domain.pid.mdmclient.12523): Failed to bootstrap path: path = /usr/libexec/mdmclient, error = 108: Invalid path
May 13 00:04:20 BBAOMACBOOKAIR2 syslogd[113]: ASL Sender Statistics
May 13 00:05:58 BBAOMACBOOKAIR2 com.apple.xpc.launchd[1] (com.apple.mdworker.bundles[12535]): Could not find uid associated with service: 0: Undefined error: 0 501
我在x.sh文件中使用如下语句调用error.awk文件实现我想要的输出
文件:x.sh
trimline| awk -f error.awk
文件:error.awk
{
gsub(/^ */, "", [=12=])
gsub(/ *$/, "", [=12=])
FS = ":"
if ( == "") {
next
}
}
{
FS = " "
deviceName =
processId =
gsub(/^.*\[/, "", processId)
gsub(/\].*$/, "", processId)
processName =
= = = = = ""
gsub(/^ */, "", [=12=])
description = [=12=]
trimtime =
FS = ":"
time =
#timeplus=$(echo "$time+1"|bc)
timeplus=let $time + 1
timeadd='{ printf "%02d" timeplus }'
timeWindow=$time"00_"$timeadd"00"
printf "deviceName:" deviceName
printf "processId:" processId
printf "processName:" processName
printf "description:" description
printf "timeWindow:" timeWindow
}
但是下一句报语法错误,这句话的目的是将文本中的时间重新排列成时间段再输出,比如00:01:58转换为0000-0100,原理就是取小时的值
timeadd='{ printf "%02d" timeplus }'
问题是这个语句怎么修正,作用是当只有一位时,左边加0
处理流程是取出冒号隔开的第一项的值加1,0加1。
step 1 00:01:58
step 2 00
step 3 00+1
step 4 01
我要timeWindow输出的是时间间隔:
0000-0100
0100-0200
0300-0400
...
2300-2400
这就是您想要做的(基于 my answer to your previous question)吗?
$ cat tst.sh
#!/usr/bin/env bash
# Using "cat file" in place of "trimline" which I dont have.
cat file |
awk '
{ split([=10=],errChk,/:/) }
errChk[5] != "" {
split(,t,/:/)
timeRange = sprintf("%02d00-%02d00",t[1],t[1]+1)
deviceName =
processId = processName =
gsub(/.*\[|].*/,"",processId)
description = [=10=]
sub(/[^(]*/,"",description)
print timeRange
print deviceName
print processId
print processName
print description
}
'
$ ./tst.sh
0000-0100
BBAOMACBOOKAIR2
1
com.apple.xpc.launchd[1]
(com.apple.mdworker.bundles[12513]): Could not find uid associated with service: 0: Undefined error: 0 501
0000-0100
BBAOMACBOOKAIR2
1
com.apple.xpc.launchd[1]
(com.apple.mdworker.bundles[12513]): Service exited with abnormal code: 78
0000-0100
BBAOMACBOOKAIR2
1
com.apple.xpc.launchd[1]
(com.apple.xpc.launchd.domain.pid.mdmclient.12523): Failed to bootstrap path: path = /usr/libexec/mdmclient, error = 108: Invalid path
输入:在x.sh
中的函数trimline中输入以下文字May 13 00:01:58 BBAOMACBOOKAIR2 com.apple.xpc.launchd[1] (com.apple.mdworker.bundles[12513]): Service exited with abnormal code: 78
May 13 00:02:12 BBAOMACBOOKAIR2 com.apple.xpc.launchd[1] (com.apple.xpc.launchd.domain.pid.mdmclient.12523): Failed to bootstrap path: path = /usr/libexec/mdmclient, error = 108: Invalid path
May 13 00:04:20 BBAOMACBOOKAIR2 syslogd[113]: ASL Sender Statistics
May 13 00:05:58 BBAOMACBOOKAIR2 com.apple.xpc.launchd[1] (com.apple.mdworker.bundles[12535]): Could not find uid associated with service: 0: Undefined error: 0 501
我在x.sh文件中使用如下语句调用error.awk文件实现我想要的输出
文件:x.sh
trimline| awk -f error.awk
文件:error.awk
{
gsub(/^ */, "", [=12=])
gsub(/ *$/, "", [=12=])
FS = ":"
if ( == "") {
next
}
}
{
FS = " "
deviceName =
processId =
gsub(/^.*\[/, "", processId)
gsub(/\].*$/, "", processId)
processName =
= = = = = ""
gsub(/^ */, "", [=12=])
description = [=12=]
trimtime =
FS = ":"
time =
#timeplus=$(echo "$time+1"|bc)
timeplus=let $time + 1
timeadd='{ printf "%02d" timeplus }'
timeWindow=$time"00_"$timeadd"00"
printf "deviceName:" deviceName
printf "processId:" processId
printf "processName:" processName
printf "description:" description
printf "timeWindow:" timeWindow
}
但是下一句报语法错误,这句话的目的是将文本中的时间重新排列成时间段再输出,比如00:01:58转换为0000-0100,原理就是取小时的值
timeadd='{ printf "%02d" timeplus }'
问题是这个语句怎么修正,作用是当只有一位时,左边加0
处理流程是取出冒号隔开的第一项的值加1,0加1。
step 1 00:01:58
step 2 00
step 3 00+1
step 4 01
我要timeWindow输出的是时间间隔:
0000-0100
0100-0200
0300-0400
...
2300-2400
这就是您想要做的(基于 my answer to your previous question)吗?
$ cat tst.sh
#!/usr/bin/env bash
# Using "cat file" in place of "trimline" which I dont have.
cat file |
awk '
{ split([=10=],errChk,/:/) }
errChk[5] != "" {
split(,t,/:/)
timeRange = sprintf("%02d00-%02d00",t[1],t[1]+1)
deviceName =
processId = processName =
gsub(/.*\[|].*/,"",processId)
description = [=10=]
sub(/[^(]*/,"",description)
print timeRange
print deviceName
print processId
print processName
print description
}
'
$ ./tst.sh
0000-0100
BBAOMACBOOKAIR2
1
com.apple.xpc.launchd[1]
(com.apple.mdworker.bundles[12513]): Could not find uid associated with service: 0: Undefined error: 0 501
0000-0100
BBAOMACBOOKAIR2
1
com.apple.xpc.launchd[1]
(com.apple.mdworker.bundles[12513]): Service exited with abnormal code: 78
0000-0100
BBAOMACBOOKAIR2
1
com.apple.xpc.launchd[1]
(com.apple.xpc.launchd.domain.pid.mdmclient.12523): Failed to bootstrap path: path = /usr/libexec/mdmclient, error = 108: Invalid path