我想做这样的事情:

cat abcd.txt | cut -f 2,1 

我希望输出中的顺序为2然后为1。在我正在测试的机器上(FreeBSD 6),这没有发生(它以1,2顺序打印)。你能告诉我怎么做吗?

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

我想我正在使用包含cut的coreutils的5.2.1版。

有帮助吗?

解决方案

使用cut无法完成此操作。根据手册页:

  

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

修补awk建议 很多 ,但即使完整补丁已被拒绝

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

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

将<=>替换为您使用的任何字段分隔符。

其他提示

拉斯的答案很棒,但我找到了一个更好的答案。与他的问题是它匹配\ t \ t,因为没有列。要解决此问题,请使用以下命令:

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    
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top