数据:
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
如何处理它。 感谢
答案 0 :(得分:1)
使用此脚本将列号传递给您的awk脚本:
varz="zipval"
awk -v VAR=$varz -v N=6 '{sub($N, VAR)}1' OutputFile.log
答案 1 :(得分:1)
您的问题是,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
答案 2 :(得分:0)
以下在我的位置正常工作:
> 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
>
答案 3 :(得分:0)
您没有发布您想要的输出,甚至没有告诉我们您想要替换哪个特定文本(“第2个字段”可能意味着几件事)所以这是一个猜测,但假设您的输入文件是以制表符分隔的字段,那么您只是需要引用你的shell变量并分配FS以及OFS:
varz="zipval"
awk -v VAR="$varz" 'BEGIN{FS=OFS="\t"} {$2=VAR} 1' OutputFile.log
我还建议你不要使用全大写的变量名,因为它用于识别awk内置变量(NR,NF等)。