LINUX.ORG.RU

awk, переменная внутри awk

 ,


0

1

Помогите, пожалуйста разобраться с awk есть файл вида:

aaa 111 222
bbb 222 333
ccc
 ddd
# fff
eee

Нужно в зависимости от первого слова, добавить шаблон в конец строки, если следующая строчка начинается с пробела или с решетки, то шаблон берется из предыдущей строки Чтобы хранить шаблон предыдущей строки сделал перменную temp, но она почему-то не отрабатывает, всегда пустая

#!/bin/bash
awk '{
if($1=="aaa")
    {
	temp="template1";
	print $0 "DELIMETER'$temp'";
	}
else if($1=="bbb")
	{
	temp="template2";
	print $0"DELIMETER'$temp'";
	}
else if(substr($0,1,1)==" " || $1 =="#")
	{
	print $0"DELIMETER'$temp'";
	}
else 
	{
	print;
	}	
}' file 


Последнее исправление: Serg0087 (всего исправлений: 1)

Вы пытаетесь внутри bash-скрипта вызвать неназначенную переменную оболочки. Попробуйте выполнить export temp=your_value и убедитесь.

Скорее всего, вы хотели написать print $0 "DELIMITER" temp;

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

Спасибо, это помогло:

Скорее всего, вы хотели написать print $0 «DELIMITER» temp;

Serg0087
() автор топика

На будущее, на awk лучше писать примерно так:

#!/usr/bin/awk -f
BEGIN {
        map["aaa"]="template1";
        map["bbb"]="template2";
}
$1 in map {
        temp=map[$1];
        print $0 "DELIMETER" temp;
        next
}
/^[ #]/ {
        print $0 "DELIMETER" temp;
        next
}
{
        print;
}

сохранить в файл имя.awk и запускать как любой другой скрипт.

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