我想在一个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
我想在一个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
为什么你有美元在你的FS
?
我不认为你目前的FS
甚至可以工作。 ...删除$
,它应该没问题。
为主导空的原因:
与您当前的FS,$\t
意味着行结束后一个标签。这将不会匹配。也就是说,经过awk处理后,文件的每一行只有一个字段。只有$0 and $1
根本没有$2
。所以$ 2是空的。
你做了交换,实际上你只需在你的原始行添加一个空字段。而且因为你重置了一个字段($ 1和$ 2),所以当你打印$ 0时,awk将在行上应用OFS,在你的情况下,OFS是默认的空间。所以,awk将打印:
$2<space>$1
请记住,$ 2是空的,$ 1实际上是您的$ 0。
它是由FS
设置为错误的值造成的。您需要FS="\t"
。
你能显示你的输入文件吗? – Kent
为什么不只是'BEGIN {FS = OFS =“\ t”} {print $ 2,$ 1}'? –