2016-04-21 26 views
2

我想通過一個文本文件看,逐行,和開關3和4欄,如果在第3列的值是大於該值在第4欄在unix中,如何操作文本文件以確保列3中的值小於列4中的值?

例如:

我要排序從這個:

890  890  3300 1767 4432P1 
2135 2135 3300 1944  
2135 2135 3300 1944 
890  890  1772 4000 4448P1 
2135 2135 3189 4000 

這樣:

890  890  1767 3300 4432P1 
2135 2135 1944 3300  
2135 2135 1944 3300  
890  890  1772 4000 4448P1 
2135 2135 3189 4000 

提前

感謝

回答

1

我會用perl:

perl -anE '@F[2,3] = sort {$a <=> $b} @F[2,3]; say "@F"' 

這將破壞原有的間距。您可能想要進入column -t以使其更加美觀。如果,另一方面,你要製表符分隔的輸出,然後做say join "\t", @F

2
$ awk '$3>$4{t=$4;$4=$3;$3=t}1' file | column -t 
890 890 1767 3300 4432P1 
2135 2135 1944 3300 
2135 2135 1944 3300 
890 890 1772 4000 4448P1 
2135 2135 3189 4000 
0

試試這個:

$ awk '{if($3>$4){tmp=$3;$3=$4;$4=tmp;print}else print}' file | column -t 

輸出:

890 890 1767 3300 4432P1 
2135 2135 1944 3300 
2135 2135 1944 3300 
890 890 1772 4000 4448P1 
2135 2135 3189 4000 
相關問題