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

Shr*_*eni 30 unix shell awk freebsd gnu-coreutils

我想做这样的事情:

cat abcd.txt | cut -f 2,1 
Run Code Online (Sandbox Code Playgroud)

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

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

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

Lar*_*eth 32

这不能使用cut.根据手册页:

选定的输入按照与读取相同的顺序写入,并且只写入一次.

修补cut已经提出了 很多 ,但即使是完整的补丁都被拒绝.

相反,你可以使用awk,像这样:

awk '{print($2,"\t",$1)}' abcd.txt
Run Code Online (Sandbox Code Playgroud)

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


Eva*_*ran 14

Lars的答案很棒,但我找到了一个更好的答案.与他的问题是它匹配\ t\t,因为没有列.要解决此问题,请使用以下内容

awk -v OFS="  " -F"\t" '{print $2, $1}' abcd.txt
Run Code Online (Sandbox Code Playgroud)

哪里:

-F"\t"是什么削减准确(标签).

-v OFS=" " 是什么分开(两个空格)

例:

echo 'A\tB\t\tD' | awk -v OFS="    " -F"\t" '{print $2, $4, $1, $3}'
Run Code Online (Sandbox Code Playgroud)

这输出:

B    D    A    
Run Code Online (Sandbox Code Playgroud)

  • 在Cygwin中,我不得不用-F\t替换-F"\ t"以使其工作. (3认同)