2009-06-24 94 views
25

强制输出字段的顺序我想要做这样的事情:从剪切命令

cat abcd.txt | cut -f 2,1 

和我想要的顺序为2,然后在输出1。在我测试的机器上(FreeBSD 6),这没有发生(它的打印顺序是1,2)。你能告诉我如何做到这一点?

我知道我总是可以编写一个shell脚本来完成这个反转操作,但我正在寻找使用'cut'命令选项的东西。

我想我使用的coreutils包含剪切版本5.2.1。

回答

27

这不能用cut来完成。根据手册页:

所选输入的写入顺序与读取的顺序相同,只写一次。

相反,你可以使用AWK,这样做:

awk '{print($2,"\t",$1)}' abcd.txt 

与你使用的字段分隔符任何替换\吨。

11

拉尔斯的回答非常好,但我发现了一个更好的答案。与他的问题是它不匹配列。为了解决这个问题使用下列内容:

awk -v OFS=" " -F"\t" '{print $2, $1}' abcd.txt 

其中:

-F"\t"是削减正是(标签)是什么。

-v OFS=" "是做什么用(两个空格)单独

实施例:

echo 'A\tB\t\tD' | awk -v OFS=" " -F"\t" '{print $2, $4, $1, $3}' 

此输出:

B D A  
+1

在Cygwin的我与替换-F “\ t” 的 - 不要做这个工作。 – 2013-07-18 11:39:57