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