2017-02-04 31 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?獲取幫助。將其存儲在新文件中,然後刪除臨時文件。完成!
相關問題