Awk将标签更改为空格

时间:2012-11-29 06:01:47

标签: bash awk

数据:

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

如何处理它。 感谢

4 个答案:

答案 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等)。