我想做这样的事情:
cat abcd.txt | cut -f 2,1
我希望输出中的顺序为2然后为1。在我正在测试的机器上(FreeBSD 6),这没有发生(它以1,2顺序打印)。你能告诉我怎么做吗?
我知道我总是可以编写一个shell脚本来执行此操作,但我正在寻找使用'cut'命令选项的东西。
我想我正在使用包含cut的coreutils的5.2.1版。
答案 0 :(得分:32)
使用cut
无法完成此操作。根据手册页:
所选输入的读取顺序与读取顺序相同 写一次。
修补cut
已proposed many times,但即使是complete patches have been rejected。
相反,您可以使用awk
执行此操作,如下所示:
awk '{print($2,"\t",$1)}' abcd.txt
将\t
替换为您用作字段分隔符的任何内容。
答案 1 :(得分:14)
拉斯'答案很棒,但我找到了一个更好的答案。与他的问题是它匹配\ 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