Верхний и нижний колонтитулы процесса AWK - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь использовать скрипт awk для чтения данных учеников.Файл имеет несколько строк заголовка и несколько строк нижнего колонтитула.(предположим, первые 3 и последние 3) Фактические данные ученика помещаются между верхним и нижним колонтитулами, разделенные запятой, как показано ниже:

имя, возраст, место

Я хочу напечатать возраст учащегосявместе с верхним и нижним колонтитулами.

Пример данных:

Header 1
Header 2
Header 3
dhana,28,USA
subha,24,India
Footer 1
Footer 2
Footer 3

Ожидаемый результат:

Header 1
Header 2
Header 3
28
24
Footer 1
Footer 2
Footer 3

Мой код:

BEGIN{ FS = ","}
{ 
    if(NR > 3)
    {
        print $2
    }else{
        print $0
    }
}

Мой вывод:

Header 1
Header 2
Header 3
28
24

Я пропускаю заголовок, используя оператор NR.как распечатать нижний колонтитул и обрабатывать только данные об ученике (возраст)?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

алгоритм двойного сканирования даст вам больше контроля

$ awk -F, -v h=3 -v f=3 'NR==FNR {n=NR; next} 
                         FNR>h && FNR<=n-f {$0=$2}1' file{,}

Header 1
Header 2
Header 3
28
24
Footer 1
Footer 2
Footer 3

, где h и f указывают строки верхнего и нижнего колонтитула, которые нужно пропустить для обработки.

0 голосов
/ 25 мая 2018

Short awk решение:

awk -F',' 'NF == 3{ $0 = $2 }1' file

Выход:

Header 1
Header 2
Header 3
28
24
Footer 1
Footer 2
Footer 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...