我正在尝试在csv文件中交换两列,我正在使用它:
#!/usr/bin/awk -f
BEGIN {FS="$\t"}
{temp=$1; $1=$2; $2=temp}{print$0}
哪个很好用,除了它在行的开头添加一个额外的空格。我怎么能阻止这个?
我的输入文件如下所示
1\t2
3\t4
我得到的是这样的:
2\t1
3\t4
答案 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"
。