强制 cut 命令输出字段的顺序

发布于 2024-07-25 06:32:22 字数 268 浏览 10 评论 0原文

我想做这样的事情:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

司马昭之心 2024-08-01 06:32:22

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

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

提议修补cut< /a> 许多 ,但甚至完整补丁已被拒绝

相反,您可以使用 awk 来完成此操作,如下所示:

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

\t 替换为您用作字段分隔符的任何内容。

This can't be done using cut. According to the man page:

Selected input is written in the same order that it is read, and is
written exactly once.

Patching cut has been proposed many times, but even complete patches have been rejected.

Instead, you can do it using awk, like this:

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

Replace the \t with whatever you're using as field separator.

友谊不毕业 2024-08-01 06:32:22

拉尔斯的回答很好,但我找到了一个更好的答案。 他的问题是它与 \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    

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:

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

Where:

-F"\t" is what to cut on exactly (tabs).

-v OFS=" " is what to seperate with (two spaces)

Example:

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

This outputs:

B    D    A    
我偏爱纯白色 2024-08-01 06:32:22

这是 perl 版本,仅供我参考:

cat abcd.txt | perl -ne 'chomp; @F=split; print("$F[1]\t$F[0]\n")' 

我明确使用 split 因为我经常只想在 \t 上拆分 (\t > split("\t"))。

Here is the perl version, just for my reference:

cat abcd.txt | perl -ne 'chomp; @F=split; print("$F[1]\t$F[0]\n")' 

I use the split explicitly because I often only want to split on \t (split("\t")).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文