0

数据:

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

4 回答 4

2

您的问题是 awk 拆分您的输入FS=[ \t]+,然后用OFS=' 'or重新组合它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
于 2012-11-29T07:53:18.407 回答
1

使用此脚本将第 no 列传递给您的 awk 脚本:

varz="zipval"
awk -v VAR=$varz -v N=6 '{sub($N, VAR)}1' OutputFile.log
于 2012-11-29T06:05:03.403 回答
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
> 
于 2012-11-29T06:14:17.987 回答
0

您没有发布您想要的输出,甚至没有告诉我们您想要替换哪些特定文本(“第二个字段”可能意味着几件事)所以这是一个猜测,但假设您的输入文件是制表符分隔的字段,您只需要引用您的 shell 变量并分配 FS 和 OFS:

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

我还建议您不要使用全大写作为变量名,因为它用于识别 awk 内置变量(NR、NF 等)。

于 2012-11-29T13:46:27.050 回答