Data:
Sandnes<space>gecom<tab>Hansen<tab>Ola<space>Timoteivn<space>10
我正在用文件中的变量替换特定列(例如:第 2 列)值。所以我正在使用命令:
varz="zipval"
awk -v VAR=$varz '{$2=VAR}1' OutputFile.log
awk 在处理后将所有制表符替换为空格。所以我使用了 OFS="\t" .
但它删除了制表符的所有空格 Sandnes<tab>gecom<tab>Hansen<tab>zipval<tab>Timoteivn<tab>10
如何处理它。谢谢
你的问题是awk在FS=[ t]+
上拆分你的输入,然后用OFS=' '
或OFS='t'
重新组装它。我不认为你可以绕过做一个额外的拆分。像这样的东西有效:
<data awk -v VAR="$varz" 'BEGIN { FS=OFS="t" } { split($1, a, " +"); $1 = a[1]" "VAR } 1'
输出:
Sandnes zipval^IHansen^IOla Timoteivn 10
使用此脚本将列 no 传递给您的 awk 脚本:
varz="zipval"
awk -v VAR=$varz -v N=6 '{sub($N, VAR)}1' OutputFile.log
以下内容在我的位置工作正常:
> setenv var "hi"
> echo "1 2 3 4 5 6 7" | awk -v var1=$var '{$6=var1}1'
1 2 3 4 5 hi 7
>
您没有发布所需的输出,甚至没有告诉我们要替换的特定文本("第 2 个字段"可能意味着几件事),所以这是一个猜测,但假设您的输入文件是制表符分隔的字段,您只需要引用您的 shell 变量并分配 FS 和 OFS:
varz="zipval"
awk -v VAR="$varz" 'BEGIN{FS=OFS="t"} {$2=VAR} 1' OutputFile.log
我还建议您不要使用全大写作为变量名称,因为这用于标识awk内置变量(NR,NF等)。