У меня есть журнал, который выглядит следующим образом:Как получить расположение символа шаблона внутри строки?
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 ------------------------- Мне было нужно что-то очень быстрое, поэтому я просто много сделал 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
@shellter Я поставил свой цикл while в редактировании в исходном сообщении – samwell