Как получить позицию столбца для нескольких имен столбцов

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

Создайте цикл оболочки вокруг кода awk, который выполняется для каждого значения x:

.
for x in 0 1; do
    printf 'Running with x=%d\n' "$x"
    awk -v x="$x" \
        '$1 == "x" { $1 = x }
         $2 == "x" { $2 = x }
         $1 == $2  { printf("match on line %d: %d == %d\n", NR, $1, $2) }' file.in
done

Код awkпроверяет два столбца на наличие символа xи (, если оно истинно )устанавливает его равным текущему значению переменной awkx(, которая устанавливается в командной строке ).

Если позже столбцы совпадают, создается некоторый вывод.

При заданных данных получается результат

Running with x=0
match on line 1: 0 == 0
match on line 3: 1 == 1
Running with x=1
match on line 2: 1 == 1
match on line 3: 1 == 1

В качестве альтернативы можно переместить цикл в awk(, что намного эффективнее, так как оболочке не нужно запускаться awkболее одного раза):

awk -v x="$x" \
        '{ for (x=0; x<=1; ++x) {
               printf("x is %d\n", x);
               if ($1 == "x") { a = x } else { a = $1 }
               if ($2 == "x") { b = x } else { b = $2 }
               if (a == b) { printf("match on line %d: %d == %d\n", NR, a, b) }
           }
          }' file.in

Выход:

x is 0
match on line 1: 0 == 0
x is 1
x is 0
x is 1
match on line 2: 1 == 1
x is 0
match on line 3: 1 == 1
x is 1
match on line 3: 1 == 1
-2
01.01.2020, 13:19
1 ответ

Попробуйте:

$ awk -F"|" 'NR==1 {for(i=1;i<=NF;i++) if ($i=="S1" || $i=="S2" || $i=="D1" ) {print i}}' demo.txt

Однако (Я только что проверил ),Ответ @guruделает то же самое и, с моей точки зрения, на него приятнее смотреть.

0
28.04.2021, 23:26

Теги

Похожие вопросы