2

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

#!/usr/bin/awk -f

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

效果很好,除了它在行首添加了一个额外的空格。我怎样才能防止这种情况?

我的输入文件看起来像这样

1\t2
3\t4

我得到的看起来像这样:

 2\t1
 3\t4
4

2 回答 2

3

为什么你有美元FS

我不认为你现在的FS工作。...删除$,它应该没问题。

前导空的原因:

使用您当前的 FS,$\t表示行尾之后的制表符。这将不匹配。也就是说,经过awk处理后,文件的每一行只有一个字段。只有$0 and $1根本没有$2。所以 $2 是空的。

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

$2<space>$1

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

于 2013-07-11T20:53:48.710 回答
2

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

你想要FS="\t"

于 2013-07-11T20:50:36.257 回答