LINUX.ORG.RU

awk


0

0

Обрабатываю при помощи awk некоторый файл. Требуется вывести из него определенные поля. Проблема в том, что поля иногда меняются местами и добавляются еще дополнительные. Поэтому жестко указать номер поля нет возможности. Как выйти из такой ситуации?

Допустим файл может быть в таком виде:

number%date%contact
001%12-12-12%test1
002%11-11-11%test2
.................

Или в таком. Заранее неизвестно. Поля могут меняться местами

number%bla%date%blabla%contact
001%bla001%12-12-12%blabla001%test1
002%blaoo2%11-11-11%blabla002%test2
...........
Мне надо получить в итоге
number%date
.......
......
Как проще всего это организовать

Спасибо.

★★

if по кол-ву полей если > 3-х то второй вариант

sdio ★★★★★
()

awk -F'%' 'NR==1 {for (f=1;f<=NF;f++){if ($f=="field") flum=f}}; NR>1 {if (flum>0) print $flum; else exit}'

Это для одного поля. Для>1 придётся подумать ;)

gena2x ★★★
()
Ответ на: комментарий от gena2x

Вот для одного поля я уже Ваш вариант накопал. Но нужно к сожалению не одно поле, а штук 9 выбрать.

swarnk ★★
() автор топика
Ответ на: комментарий от swarnk

Можно и awk сделать, я родил такое:

#!/bin/awk -f

BEGIN {
        ORS=FS="%"
        fields[0]="f2"
        fields[1]="f4"
        fields[2]="f5"
}

{
 if (NR == 1) {
        for (j in fields) {
                for (i=1; i <= NF; i++) {
                        if ($i == fields[j]) {
                                nums[idx++] = i
                                break
                        }
                }
        }
 } else printf "\n"

 for (j in nums)
        print $nums[j]

}

$ cat file | ./script.awk

Chumka ★★★
()
Ответ на: комментарий от Chumka

Премного благодарен. Вроде разобрался.

Сам бы я конечно такое не осилил....

swarnk ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.