изменить конкретную строку файла с помощью awk - PullRequest
0 голосов
/ 29 марта 2012

У меня есть файл, который я хочу изменить в определенной строке.Я использовал это:

#!/bin/bash/
cp /dir1/dir2/FILE_to_be_modified . ;
var ="$1 $1 $1";
awk -v li=4 -v new="$var" '{
        if (NR==li) {
                  print new;
        } else {
                 print $O;
        }
}' FILE_to_be_modified>>new_FILE

с этим я мог изменить строку 4 из FILE_to_be_modified, но всегда с такими шаблонами, как 9 9 9 12 12 12, теперь я хотел бы что-то вроде 9 9 11 или 12 12 14.Я пытался глупо думать, как изменение var на $1 $1 $1+2.я должен использовать bc?

Ответы [ 3 ]

3 голосов
/ 29 марта 2012

Баш арифметика:

var = "$1 $1 $(($1 + 2))"

Посмотрите документы и учебник .

1 голос
/ 29 марта 2012

Когда вы пишете var ="$1 $1 $1", вы позволяете bash, а не awk, расширять переменные.$1 случайно имеет значение как в awk, так и в bash.Итак, теперь вы заменяете строку на 3 вхождения первого аргумента, переданного вашему сценарию.Изменив его, например, var ="$1 $2 $3", вы будете использовать 3 первых параметра, переданных в ваш скрипт.Если, с другой стороны, ваша цель состоит в том, чтобы заменить строку значениями первого поля, как видно из awk, используйте одинарную кавычку: var ='$1 $1 $1'.Таким образом, bash не расширит его, только awk и, если вы измените его на var ='$1 $2 $3', вы замените строку первыми 3 полями исходного значения (как видно из awk).

0 голосов
/ 29 марта 2012

Кроме того, вы можете передать арифметику на awk

#!/bin/sh
awk -v li=4 -v val="$1" '
    NR==li {print val, val, val+2; next}
    {print}
' /dir1/dir2/FILE_to_be_modified >> ./new_FILE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...