2016-04-26 74 views
0

我正在使用awk在制表符分隔文件中插入新列,然后我希望输出制表符分隔。然而,而不是预期的5制表符分隔栏,我只得到2awk在插入列后添加' t'到输出文件

awk -v var=$REL_TYPE -F "\t" '{$3=var FS $3 ;}1' $INPUT_FILE > OFS="\t" $OUTPUT_FILE 

这里是输入数据:

a1000 a1001 213 1 
a1000 a7020 164 2 
a1000 a6004 160 3 
a1000 a7004 124 4 

这里的输出数据:

a1000 a1001 inserted_column 213 1 
a1000 a7020 inserted_column 164 2 
a1000 a6004 inserted_column 160 3 
a1000 a7004 inserted_column 124 4 

乍一看,这看起来很完美,但输出只有两个由'\ t'分隔的列,在$ 3之后。

+2

'OFS =“\ t”'是您重定向到的输出文件,它不被用作awk变量赋值。 – Barmar

+0

在读取输入文件之前,您还需要对'OFS' *进行赋值,使其对输入文件生成的输出生效。因此'awk -v ... -F ...'脚本...'OFS ='\ t'“$ INPUT_FILE”>“$ OUTPUT_FILE”'。 –

回答

1

您没有正确设置OFS。将作业放置在>之后使其成为要写入的输出文件,因此不会将其作为变量分配进行分析。以下着作:

awk -v var=$REL_TYPE -v OFS="\t" -F "\t" '{$3=var FS $3 ;}1' $INPUT_FILE > $OUTPUT_FILE