Awk正在插入空格

时间:2013-07-11 20:44:07

标签: bash scripting awk

我正在尝试在csv文件中交换两列,我正在使用它:

#!/usr/bin/awk -f

BEGIN {FS="$\t"}
{temp=$1; $1=$2; $2=temp}{print$0}

哪个很好用,除了它在行的开头添加一个额外的空格。我怎么能阻止这个?

我的输入文件如下所示

1\t2
3\t4

我得到的是这样的:

 2\t1
 3\t4

2 个答案:

答案 0 :(得分:3)

为什么你的FS中有美元?

我认为您当前的FS无法正常工作。 ...删除$,它应该没问题。

导致空白的原因:

使用您当前的FS,$\t表示行尾后的标签。什么都不匹配。也就是说,在由awk处理之后,文件的每一行只有一个字段。只有$0 and $1根本没有$2。所以$ 2是空的。

你做了交换,实际上你只是在原始行中添加一个空字段。而且因为你重置一个字段($ 1和$ 2),当你打印$ 0时,awk将在该行上应用OFS,在你的情况下,OFS是默认的,一个空格。所以,awk会打印出来:

$2<space>$1

请记住,$ 2为空,$ 1实际上是$ 0。

答案 1 :(得分:2)

这是由于将FS设置为错误的值。

您想要FS="\t"