我有一個日誌,看起來像這樣:如何獲取字符串中模式的字符位置?
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的函數,這個函數「返回haystack字符串中第一次出現針的數字位置」,這正是我需要的,是否有這樣的東西,我可以在bash中使用?
@shellter ------------------------- 我需要的東西非常快,所以我只是做了很多googleing,發現了一些位並將其組合在一起。
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
你是否正在執行VAR =`...`在一個while循環中讀取整個日誌文件,該文件基本上處理整個文件?如果是這樣,或許更好地弄清楚如何在1 awk進程中完全解析文件。其他...沒關係! ;-) 祝你好運。 – shellter 2011-12-16 02:59:46
@shellter我已將我的while循環放在原帖 – samwell 2011-12-16 08:27:47