[英]Sorting bash arguments
我有以下幾行:
Is,C0Cf[0],0x0,LutValue,0,11,0x0
Is,C1Cf[0],0x0,LutValue,0,11,0x0
Is,C0Cf[1],0x0,LutValue,0,11,0x0
Is,C1Cf[1],0x0,LutValue,0,11,0x0
.
.
.
如何根據第二列對其進行排序,首先是所有C0Cf [0] ... C0Cf [50],然后是C1Cf ..?
嘗試這個:
sort -n -k 2 -t, inputfile.txt
例如:
$ cat inputfile.txt
Is,C0Cf[0],0x0,LutValue,0,11,0x0
Is,C1Cf[0],0x0,LutValue,0,11,0x0
Is,C0Cf[1],0x0,LutValue,0,11,0x0
Is,C1Cf[1],0x0,LutValue,0,11,0x0
$ sort -k 2 -t, inputfile.txt
Is,C0Cf[0],0x0,LutValue,0,11,0x0
Is,C0Cf[1],0x0,LutValue,0,11,0x0
Is,C1Cf[0],0x0,LutValue,0,11,0x0
Is,C1Cf[1],0x0,LutValue,0,11,0x0
$
-k 2
按第二個字段排序。 -t,
makes ,
字段分隔符。 -n
按數值排序。
您需要首先在第二列上按字母順序排序,然后將該列分成兩列,然后對方括號中的數字進行第二排序。
sed 's/\[/,/' input-file \
| sort -t, -k2,2 -k3,3n \
| sed 's/\(,[^,]*\),/\1[/'
如果輸入中可以包含諸如C10Cf之類的字符串,則還需要替換第一個C,並使其成為主要的排序數字:
sed 's/,C/,/;s/\[/,/' input-file \
| sort -t, -k2,2n -k3,3n \
| sed 's/,\([^,]*\),/,C\1[/'
sort
具有命令行參數,您可以執行以下操作: -t
指定分隔符, -k
指定要進行排序的字段
因此您可以使用sort -t',' -k2
,盡管我不得不承認我還沒有嘗試過!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.