Использование If-Statement для назначения переменной в awk - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь создать файл сценария awk, который принимает входной файл и преобразует четвертый столбец информации для первых трех строк в одну строку. Например, если input.txt выглядит следующим образом:

XX YY val1 1234
XX YY val2 2345
XX YY val3 3456
stuff random garbage junk extrajunk
useless 343059 random3

Я хочу напечатать четвертый столбец для строк 1, 2 и 3 в одну строку:

1234 2345 3456

Я был пытаясь сделать это с помощью операторов if / else-if, чтобы мой файл выглядел прямо сейчас так:

#!/usr/bin/awk -f

{
    if ($1 == "XX" && $3 == "val1") 
    {
             var1=$4; 
    }  
    else if ($1 == "XX" && $3 == "val2") 
    {
             var2=$4; 
    }
    else if ($1 == "XX" && $3 == "val3") 
    {
             var3=$4; 
    }
}

END {print var1, var2, var3

, а затем я напечатал бы переменные в одной строке. Однако, когда я пытаюсь реализовать это, я получаю синтаксические ошибки, указывающие на символ "=" в строке var2 = $ 4.

EDIT

Решено, в моем реальный файл Я назвал переменные в стиле фанк (но описательные) имена, и это все испортило. - Упс.

Спасибо

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Попробуйте вместо этого:

#!/bin/env bash
awk '
$1 == "XX" { var[$3] = $4 }
END { print var["val1"], var["val2"], var["val3"] }
' "$@"

Существует почти наверняка гораздо более простое решение в зависимости от ваших реальных требований, например, возможно:

awk '
{ vars = (NR>1 ? vars OFS : "") $4 }
NR == 3 { print vars; exit }
' "$@"

. Для облегчения будущих улучшений, если ничего больше, не вызывайте awk из shebang, просто вызовите его явно.

1 голос
/ 13 апреля 2020

вы можете написать что-то вроде этого

$ awk '$1=="XX"{if($3=="val1") var1=$4
                else if($3=="val2") var2=$4
                else if($3=="val3") var3=$4}
        // .. do something with the vars ....

однако, если вы просто хотите напечатать четвертый столбец первых 3 строк

$ awk '{printf "%s ", $4} NR==3{exit}' ile
1234 2345 3456
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...