使用awk更改文件的特定行

时间:2012-03-29 09:57:08

标签: linux bash awk

我有一个文件,我想在特定的行中修改。我用过这个:

#!/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

有了这个,我可以修改FILE_to_be_modified的第4行,但总是使用9 9 9 12 12 12这样的模式,现在我想要像9 9 1112 12 14这样的内容。我试过傻傻的想法就像把var改为$1 $1 $1+2一样。我应该使用bc吗?

3 个答案:

答案 0 :(得分:3)

Bash算术:

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

查看the docsthe tutorial

答案 1 :(得分:1)

当您撰写var ="$1 $1 $1"时,请{@ 1}}而不是bash展开变量。 awk意外地在$1awk中都有意义。所以你现在所做的就是用传递给你脚本的第一个参数的3次替换该行。通过将其改为例如bash您将使用传递给脚本的3个第一个参数。另一方面,如果您的目标是使用var ="$1 $2 $3"看到的第一个字段的值替换该行,请使用单引号:awk。这种方式var ='$1 $1 $1'不会展开它,只会bash,如果您将其更改为awk,您将使用原始值的前3个字段替换该行(如{ {1}})。

答案 2 :(得分:0)

或者,您可以将算术移交给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