使用剪切命令重新排序字段/字符

使用剪切命令重新排序字段/字符

可能的重复:
在单个命令中组合 2 个不同的剪切输出?

我有一个文件 - temp.txt - 其中包含

ABCDF

PQRST

LMNOP

我尝试了这个cut命令

$ cut -c 2-5 temp.txt
BCDF

QRST

MNOP

输出是正确的。

$ cut -c 1,2,3,4 temp.txt
ABCD

PQRS

LMNO

输出是正确的。

但是当我改变顺序时,意思是

$ cut -c 2-4,1 temp.txt
ABCD

PQRS

LMNO

显示以上输出。

但逻辑上输出是

BCDA

QRSP

MNOL

所以我的问题是这是如何发生的,背后有什么原因。

答案1

解释在 中man cut,尽管很容易将其视为您的首选期望。然而它确实说:

Selected input is written in the same order that it is read  

输入的含义可能不明确,但通常选项就是选项,而正在处理的文件肯定是输入

list,例如。-c 2,3,4,1非常类似于正则表达式列表:[2341];它意味着列表中的任何数字,即使它们加倍......例如-c 2,2,2,2,2,2与 .. 相同,-c 2对于正则表达式,[2222222]与 ... 相同[2],因此选项的顺序不相关。

答案2

解决办法是:

sed 's:^\(.\)\(.*\):\2\1:' file.txt

(昨天有人发表了类似问题的答案)

Cut 似乎不对输出进行排序,仅选择列/字段的范围并按照与原来相同的顺序输出。

相关内容