2013-07-11 39 views
2

我想在一个CSV文件交换两列,我使用这个:awk中被插入空格

#!/usr/bin/awk -f 

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

伟大的工程,但它是在该行的开头添加一个额外的空格。我怎样才能防止这一点?

我输入文件看起来像这样

1\t2 
3\t4 

我能得到什么看起来像这样:

2\t1 
3\t4 
+0

你能显示你的输入文件吗? – Kent

+0

为什么不只是'BEGIN {FS = OFS =“\ t”} {print $ 2,$ 1}'? –

回答

3

为什么你有美元在你的FS

我不认为你目前的FS甚至可以工作。 ...删除$,它应该没问题。

为主导空的原因:

与您当前的FS,$\t意味着行结束后一个标签。这将不会匹配。也就是说,经过awk处理后,文件的每一行只有一个字段。只有$0 and $1根本没有$2。所以$ 2是空的。

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

$2<space>$1 

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

2

它是由FS设置为错误的值造成的。您需要FS="\t"