AWK: условно получить текст в файле - PullRequest
0 голосов
/ 12 февраля 2012

Мне нужно найти значение в файле, который имеет идентификатор (скажем, valueID1) и меньше определенного значения. Исходя из этого, мне нужно найти первое значение, которое связано с valueID1, но имеет другое значение id и находится в другой строке (скажем, valueID2)

Скажем, я хотел найти идентификатор в файле с именем "birthday", например, birthday = xx / xx / xxxx. Я бы хотел найти первый день рождения ниже определенной даты (мне нужно было бы использовать $ 3, чтобы получить фактическое числовое значение) Затем я хотел бы получить значение второго идентификатора, который находится рядом с первым, поэтому «имя», как в «имя = Грег». Я хотел бы вывести «Грег» там. Я хочу только первый результат, а не все результаты меньше, чем первое указанное значение.

Есть мысли о том, как это сделать? Это все, что я смог сделать, и это не работает вообще.

{
 if((/valueID1/ $3) < 0.1) print /valueID2/ $3; else
       /valueID2/
}

1 Ответ

1 голос
/ 12 февраля 2012

Вот что я понимаю из вашего описания, ваши данные могут выглядеть примерно так:

Birthday = 2011
Name = Anna
Birthday = 1987
Name = George

В этом случае вы хотите распечатать «Джордж», потому что его день рождения меньше 1999 года. Еслиэти предположения верны, вот как я это решаю:

awk '$1=="Birthday"{birthday = $3} $1=="Name" && birthday<1999 {print $3}' birthday.txt

Обсуждение

  • Я предполагаю, что ваш файл данных называется birthday.txt
  • Первая часть $ 1 == "Birthday" {birthday = $ 3} сохраняет поле дня рождения в переменную birthday
  • Далее, если строка содержит "Name", мы проверяем день рождениякоторый мы сохранили и напечатали

Обновление

Если год всегда является последним полем, будет работать следующее.Если это все еще не работает, пожалуйста, предоставьте входные данные и ожидаемый результат.Трудно дать точный результат, когда я не до конца понимаю проблему.Удачи.

awk '/BirthdayYear/{birthday=$NF} $1=="Name" && birthday<1999 {print $3}' birthday.txt
...