我有以下代码:
v=`date "+%Y%m%d"`
awk -F, '{$2=$v;}1' OFS=, test.txt > test2.txt
其中test.txt
是我的输入文件,test2.txt
是输出文件。
test1.txt
中的行符合以下格式:Unix,10,A
当我执行上面的脚本时,它会将test.txt
中的第一个和最后一个单词加倍答案 0 :(得分:0)
喜欢这个
awk -F, '{$2=v;}1' OFS=, v=`date "+%Y%m%d"` file
Unix,20140109,A
你不应该在awk
内阅读变量
首先分配它们,十个使用它们。
v=`date "+%Y%m%d"`
awk -F, '{$2=var;}1' OFS=, var="$v" file
答案 1 :(得分:0)
如果打算用$v
中的值替换第二个字段,则需要以某种方式将值传递给Awk。作为一个单独的过程,Awk不了解shell的内部变量。
awk -F, -v v="$v" '{$2=v}1' OFS=, test.txt > test2.txt
另请注意,Awk变量的名称仅为v
。对于Awk,$v
表示其编号位于变量v
中的输入字段。
答案 2 :(得分:-1)
我会在这里推荐非遗留语法:
v=$(date "+%Y%m%d")
然后您可以使用这些awk
调用中的任何一个:
awk -F, -v v="$v" '{$2=v}1' OFS=, test.txt > test2.txt
awk -F, '{$2=v}1' OFS=, v="$v" test.txt > test2.txt
awk -F, '{$2="'$v'"}1' OFS=, test.txt > test2.txt
或者,如果稍后在shell中不需要v
变量,则可以使用以下任一项从date
内部运行awk
命令:
awk -F, 'BEGIN{"date \"+%Y%m%d\""|getline v}{$2=v}1' OFS=, test.txt > test2.txt
或
awk -F, 'BEGIN{v="'$(date "+%Y%m%d")'"}{$2=v}1' OFS=, test.txt > test2.txt
或效率低下
awk -F, '{$2="'$(date "+%Y%m%d")'"}1' OFS=, test.txt > test2.txt