强制 cut 命令输出字段的顺序
我想做这样的事情:
cat abcd.txt | cut -f 2,1
并且我希望输出中的顺序为 2,然后为 1。 在我正在测试的机器上(FreeBSD 6),这种情况没有发生(它以 1,2 顺序打印)。 你能告诉我该怎么做吗?
我知道我总是可以编写一个 shell 脚本来执行此逆向操作,但我正在寻找使用“cut”命令选项的东西。
我想我正在使用包含 cut 的 coreutils 5.2.1 版本。
I want to do something like this:
cat abcd.txt | cut -f 2,1
and I want the order to be 2 and then 1 in the output. On the machine I am testing (FreeBSD 6), this is not happening (its printing in 1,2 order). Can you tell me how to do this?
I know I can always write a shell script to do this reversing, but I am looking for something using the 'cut' command options.
I think I am using version 5.2.1 of coreutils containing cut.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用
cut
无法完成此操作。 根据手册页:已提议修补
cut
< /a> 许多 次,但甚至完整补丁已被拒绝。相反,您可以使用
awk
来完成此操作,如下所示:将
\t
替换为您用作字段分隔符的任何内容。This can't be done using
cut
. According to the man page:Patching
cut
has been proposed many times, but even complete patches have been rejected.Instead, you can do it using
awk
, like this:Replace the
\t
with whatever you're using as field separator.拉尔斯的回答很好,但我找到了一个更好的答案。 他的问题是它与 \t\t 匹配,因为没有列。 要解决此问题,请使用以下命令:
其中:
-F"\t"
是准确(制表符)上剪切的内容。-v OFS=" "
是分隔的内容(两个空格)示例:
此输出:
Lars' answer was great but I found an even better one. The issue with his is it matches \t\t as no columns. To fix this use the following:
Where:
-F"\t"
is what to cut on exactly (tabs).-v OFS=" "
is what to seperate with (two spaces)Example:
This outputs:
这是
perl
版本,仅供我参考:我明确使用
split
因为我经常只想在\t
上拆分 (\t
> split("\t"))。Here is the
perl
version, just for my reference:I use the
split
explicitly because I often only want to split on\t
(split("\t")
).