我有一个日志,看起来像这样:
2011-12-15 23:37 8920 xxxxxxxxxxxx
2011-12-16 00:06 8979 xxxxxxxxxxxx
2011-12-16 00:40 8757 xxxxxxxxxxxx
2011-12-16 00:43 8795 xxxxxxxxxxxx
2011-12-16 00:43 8795 xxxxxxxxxxxx
2011-12-16 01:17 174050 xxxxxxxxxxxx
2011-12-16 01:19 139883 xxxxxxxxxxxx
2011-12-16 01:34 174129 xxxxxxxxxxxx我需要解析这个日志,但我唯一关心的部分是"xxxxxxxxxxxx";"xxxxxxxxxxxx“可以是任何东西,但它总是具有相同的字符数。
目前,我正在使用它来解析我的日志:
VAR=`awk NR==$i log.log | cut -c30-45`但这是假设第三列不会更改字符数,例如"8920",但如您所见,有三个日志超过四个字符,例如"174129“。除了第三列之外的所有内容都将具有相同的字符数,第四列将有所不同,但字符数将不同。
我需要得到第四列中的内容,所以我想也许我可以得到"xxxxxxxxxxxx“开始的字符位置,然后我就可以做cut -c$STRING_POS-67了。在PHP中有一个叫做strpos的函数,这个函数“返回大堆字符串中第一次出现的指针的数字位置”,这正是我需要的,有没有类似这样的东西可以在bash中使用呢?
@shellter -我需要一些非常快速的东西,所以我做了很多谷歌搜索,找到了一些零碎的东西,然后把它们组合在一起。
NUM_LINES=`awk -F, 'END{print NR}' log.log`
while [ $i -le $NUM_LINES ]
do
VAR=`awk -v a=$i 'NR==a{print $4}' log.log | cut -c28-58`
# Do stuff with $VAR
i=$(( $i + 1 ))
done发布于 2011-12-16 11:55:19
这可能对你有用:
VAR=$(sed 's/.*[0-9] //' log.log)https://stackoverflow.com/questions/8529003
复制相似问题