После печати предыдущей строки, где файл содержит один токен, теперь нужно пройти через результат, чтобы соответствовать требованию

Я использовал приведенный ниже код для печати предыдущей строки, где файл содержит один токен

#! /bin/ksh file=input.txt while read line do awk 'NF == 1 { print LAST } { LAST=$0 }' done < "$file" 

Теперь мне нужно пройти через результат и вам нужно проверить 9-ю позицию, 11-е, 13-е и т. Д. До конца строки с последовательными нечетными позициями и если эти позиции не соответствуют ни одному из упомянутых цифр:

 201 230 197 193 229 200 215 226 001 198 

Он должен печатать ошибку как CORRUPTED , если не CORRUPTED быть напечатан.

Вот пример моего файла:

 59 6 18 2014 169 7 14 2 7671912 7849744 201 4 60 6 19 2014 170 5 49 2 7671912 7849744 201 5 61 6 20 2014 171 6 8 2 7671912 7849744 201 6 62 6 23 2014 174 5 3 2 7671912 7849744 201 7 63 6 23 2014 174 7 17 2 7671912 7849744 201 8 64 6 24 2014 175 16 13 2 7671912 7849744 201 9 65 6 25 2014 176 8 20 2 7671912 7849744 201 10 10 1 1 49 6 16 2014 7 39 201 1 0 1043 <au_launchpad_back.gif> 201 gif <SIZE> 871 1 2 49 6 17 2014 13 15 201 1 0 1043 <au_launchpad_back.gif> 201 gif <SIZE> 871 1 3 49 6 18 2014 1 38 201 1 0 1043 <au_launchpad_back.gif> 201 gif <SIZE> 871 1 4 49 6 18 2014 7 14 201 1 0 1043 <au_launchpad_back.gif> 201 gif <SIZE> 871 1 5 49 6 19 2014 5 49 201 1 0 1043 <au_launchpad_back.gif> 201 gif <SIZE> 871 

Если мы рассмотрим это как пример, 9-я позиция – 7671912

ПРИМЕЧАНИЕ. Код должен быть осуществим и в любом другом файле.

Попробуй это:

 $ echo "65 6 25 2014 176 8 20 2 7671912 7849744 201 10" | awk 'FNR == NR { a[$1]; next } { for (i = 9; i <= NF; i += 2) { if (!($i in a)) { flag = 1; } } if (flag) { print "CORRUPTED"; } else { print "AVAILABLE"; } } ' file - CORRUPTED 

file содержит все ваши цифры для сравнения. Вы должны заменить echo "65 6 25 2014 176 8 20 2 7671912 7849744 201 10" из этого теста сценарием, который печатает предыдущую строку, где файл содержит один токен.

объяснение

  • FNR == NR { a[$1]; next } FNR == NR { a[$1]; next } : при обработке file мы сохраняем каждое число в file в массив a .
  • После чтения file мы прокручиваем все нечетные поля, начиная с поля 9th , если значение поля не в массиве a , мы устанавливаем flag = 1 .
  • Наконец, если flag установлен в 1, это означает, что у нас есть хотя бы одно поле, в котором его значение не указано в file , поэтому мы печатаем CORRUPTED , иначе печатаем AVAiLABLE .