2012-11-29 84 views
0

数据:awk中改变标签以空格

Sandnes<space>gecom<tab>Hansen<tab>Ola<space>Timoteivn<space>10

我代特定列(例如:帖后柱),用在一个文件中的可变值。所以我使用的命令如下:

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

如何处理它。 感谢

+1

[我怎样才能提供bash变量作为字段在awk中打​​印](http://stackoverflow.com/questions/13619521/how-can-i-supply-bash-variables-as-fields-for -print-awk) –

回答

1

使用这个脚本没有通过列到你的awk脚本:

varz="zipval" 
awk -v VAR=$varz -v N=6 '{sub($N, VAR)}1' OutputFile.log 
+0

谢谢它的工作。但Awk替换替换标签空间。 – Sourcecode

+0

这对我来说似乎是一个完全不同的问题,而不是问题。但是如果你在你的问题中发布了一些示例场景,我可以尝试给你一个答案。 – anubhava

+0

更新了问题。 – Sourcecode

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 
> 
+0

将var设置为“hello world”之后尝试一次,然后在修复之后再次尝试使用制表符而不是字段2和3之间的空格想象你的文件是制表符分隔的,所以$ 1实际上是“1 2”,$ 2是“3 4 5 6 7”。 –

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 
0

你不发表您所需的输出,甚至告诉我们,你就想更换哪些特定的文本(“帖后场”可能意味着几件事情),所以这是一个猜测,但假设你的输入文件是制表符分隔的字段,你只需要引用您的shell变量,并将FS以及OFS:

varz="zipval" 
awk -v VAR="$varz" 'BEGIN{FS=OFS="\t"} {$2=VAR} 1' OutputFile.log 

我也建议你不要使用所有 - 上部因为它用于识别awk内建变量(NR,NF等)。