2017-02-04 76 views
0

我有一个文件trial.txt,我只想对其第四列进行排序而不更改其他列的顺序。 我的文件内容是这样的。对文件的单列进行排序而不干扰其他列

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 

我试过这个。

sort -k 4 trial.txt 

但它没有按预期给出输出。

回答

0

使用:
sort -k4 -n -s trial.txt
除了k选项,建议您使用-n比较数字,-s选项抑制不得已的比较。查看手册了解更多信息。 另外,如果使用-r选项来反转排序模式,则您所需的输出显示为降序。

+0

谢谢你的建议,但这仍然不起作用。因为我使用-n来比较数字,但也不能正常工作,并且仍然给出与上面相同的输出。我想用sed或awk来完成它。因为,单独排序不能做到这一点。请使用一些sed和awk命令来看看这个。帮助将非常感激。 – user7515829

+0

对不起,我误解了你的问题,我已经根据第4列对所有行进行了排序。 – Akash

+0

这很好的阿卡什。因为我被困在这个问题的逻辑上。现在我想,它可以通过使用awk命令完成。我很困惑如何使用数组和循环。 – user7515829

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?获取帮助。将其存储在新文件中,然后删除临时文件。完成!
相关问题