【发布时间】:2017-01-14 10:24:28
【问题描述】:
我想在特定行(例如第 3 行)插入一些变量(例如 3)。我有以下 MWE。
#!/bin/sh
echo > testfile
echo >> testfile
echo >> testfile
v1=1; v2=2; v3=3
sed -i "3,3c\ $v1 $v2 $v3" testfile
cat testfile
我可以使用awk 一步完成吗?我可以的
awk -v value=$v1 ' NR==3 {$1=value"\t"}1' testfile > tmp; mv tmp testfile
但这是针对一个变量。我必须为v2 和v3 创建类似的行,这是我不想要的。
PS。在上面的例子中,我使用了三次echo,这样我就可以使用sed/awk直到空testfile的第三行。有没有更聪明的方法在第 n 行插入?
【问题讨论】:
-
awk -v v1="$v1" -v v2="$v2" -v v3="$v3" '…program…' file?我的一个 shell 脚本以这种方式将 8 个变量传递给awk脚本。这是否是一个完全好的想法是一个单独的讨论,但可以将所需的尽可能多的变量传递给awk。这大致就是 anubhava 在他的答案中用他的代码显示的内容。 -
MWE是什么? -
@JonathanLeffler,是的。
awk -v v1="$v1" -v v2="$v2" -v v3="$v3" 'NR==3 {$1=v1"\t"; $2=v2"\t"; $3=v3}1' testfile > tmp; mv tmp testfile适用于上述示例。但是@anubhava 的解决方案看起来更有吸引力。 :) @EdMorton MWE => 最小的工作示例。