对文件的单个列进行排序而不会打扰其他列

时间:2017-02-04 14:40:21

标签: unix columnsorting

我有一个文件trial.txt,我想在其中排序第四列,而不更改其他列的顺序。 我的文件内容是这样的。

fib

我希望我的输出看起来像这样

A user 9 12 ab    
B user 2 9 cd    
C user 5 13 da

我试过这个。

A user 9 13 ab    
B user 2  12 cd    
C user 5  9 da

但它没有按预期提供输出。

2 个答案:

答案 0 :(得分:0)

使用:
sort -k4 -n -s trial.txt
k选项外,建议您使用-n来比较数字,-s选项会抑制最后的比较。查看手册以获取更多信息。 此外,如果使用-r选项来反转排序模式,则所需输出显示降序。

答案 1 :(得分:0)

我很抱歉对这个问题作出了错误的解释。所以这是最终答案。这很简单:

  1. 首先使用awk获取文件trial.txt的第三列,并将其保存在临时文件中。
  2. 对此临时文件进行排序。
  3. 同时读取trial.txt和临时文件中的每一行。为此,请阅读https://unix.stackexchange.com/questions/82541/loop-through-the-lines-of-two-files-in-parallel。然后从trial.txt的每行输入中使用awk替换其第4列,并使用临时文件中的行输入。要做到这一点,请从How to replace the nth column/field in a comma-separated string using sed/awk?获取帮助。将其存储在新文件中,然后删除temp。完成!