从切命令迫使输出字段的顺序(Forcing the order of output fields f

2019-07-29 04:22发布

我想要做这样的事情:

cat abcd.txt | cut -f 2,1 

和我想要的顺序为2,然后在输出1。 在机器我测试(FreeBSD的6),这是不会发生(它在1,2顺序打印)。 你能告诉我如何做到这一点?

我知道我可以写一个shell脚本来完成这个逆转,但是我正在寻找使用“剪切”命令选项的东西。

我想我使用含切的coreutils 5.2.1版本。

Answer 1:

这不能用做cut 。 根据手册页:

选择的输入是写在相同的顺序,它被读取,写入一次。

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

相反,你可以用它做awk ,就像这样:

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

替换\t与你使用的字段分隔符什么的。



Answer 2:

拉斯答案是伟大的,但我发现了一个更好的一个。 他的问题是它匹配\ 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    


文章来源: Forcing the order of output fields from cut command