我有一个文件,我想在特定的行中修改。我用过这个:
#!/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 11
或12 12 14
这样的内容。我试过傻傻的想法就像把var
改为$1 $1 $1+2
一样。我应该使用bc
吗?
答案 0 :(得分:3)
答案 1 :(得分:1)
当您撰写var ="$1 $1 $1"
时,请{@ 1}}而不是bash
展开变量。 awk
意外地在$1
和awk
中都有意义。所以你现在所做的就是用传递给你脚本的第一个参数的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