2013-01-11 43 views
0

我有以下格式的某些字段排序列的部分值 - Unix的

apple banana blue xyz=4;pqr=5;mno=3 
lemon banana red xyz=2;pqr=6;mno=7 
horse tiger green xyz=3;pqr=2;mno=1 

我想由第四列的「PQR」值對它們進行排序,使我的輸出是:

horse tiger green xyz=3;pqr=2;mno=1 
apple banana blue xyz=4;pqr=5;mno=3 
lemon banana red xyz=2;pqr=6;mno=7 

我試過如下:

貓file.txt的| sort -key = 4.2,但是這不起作用,因爲它需要第二個字符進行排序。

回答

1

你可以嘗試分裂您semicolumn分離領域的製表符分隔

cat file1 | sed 's/;/;\t/g' 

apple banana blue xyz=4; pqr=5; mno=3 
lemon banana red xyz=2; pqr=6; mno=7 
horse tiger green xyz=3; pqr=2; mno=1 

...排序您的輸出,然後合併回你的領域

cat file1 | sed 's/;/;\t/g' | sort --key=5 | sed 's/;\t/;/g' 

horse tiger green xyz=3;pqr=2;mno=1 
apple banana blue xyz=4;pqr=5;mno=3 
lemon banana red xyz=2;pqr=6;mno=7 

不是最好的解決方案,但它工作正常。

1

這可能有效。它忽略空白和非打印字符,使用;分割字段,並在第二個字段上排序。

sort -bi -t\; -k2 file.txt