2014-07-04 153 views
1

我有一個數據看起來像這樣如何排序忽略空白行

<some blah! blah!>|201451|<some blah! blah!> 

<some blah! blah!>|201441|<some blah! blah!> 

<some blah! blah!>|201431|<some blah! blah!> 

<some blah! blah!>|201421|<some blah! blah!> 

我必須把它整理到

<some blah! blah!>|201421|<some blah! blah!> 

<some blah! blah!>|201431|<some blah! blah!> 

<some blah! blah!>|201441|<some blah! blah!> 

<some blah! blah!>|201451|<some blah! blah!> 

我一直在使用這兩種嘗試:

sort -t"|" -k4.5,4.6 -b data 
LC_ALL=c sort -t"|" -k4.5,4.6 -b data 

但它總是給我

<FOUR BLANK SPACE> 
<some blah! blah!>|201421|<some blah! blah!> 
<some blah! blah!>|201431|<some blah! blah!> 
<some blah! blah!>|201441|<some blah! blah!> 
<some blah! blah!>|201451|<some blah! blah!> 

我想維護與排序值的空間。我該怎麼做?

基本上我有忽略該行空間,而不是刪除它們...

+3

你不能。排序是按照每行的方式進行的,因此這些空白行將按照原樣排序。你會更好地擺脫它們,然後使用awk/sed來添加空白行。 –

+0

然後y?他們是否給出了-b選項。 –

+1

樣本數據只有3列,所以'-k4.5,4.6'是誤導(對於顯示的數據,它應該可能是'-k2.5,2.6')。它也似乎是你想對第二列的最後兩個字符進行字典排序,這意味着' | 201501 |將在數據中顯示的任何行之前出現'',並且' | 199999 |在顯示任何一行後會出現「」。那真的是你想要的嗎?如果你只是在第二列進行數字排序:'-k2n'? '-b'選項適用於一行中的字段中的前導空格。 –

回答

4

嘗試執行:

sort -t"|" -k4.5,4.6 data | grep -v "^$" | awk '{print $0"\n"}' 
+0

由於示例數據沒有4列(請參閱我對該問題的評論)的警告,這應該工作並且整齊。 –

1

這裏是與第一分選去除空行,然後插入空行的溶液背部採用sed

grep -v '^$' <file> | sort -t'|' -k 4.5,4.6 | sed 's/$/\n/' 
0

你可以完成你需要通過與awk簡單地檢查是否療法導致什麼e是內容就行 - 然後按照它適合你的特定情況的sort

$ awk '$1' data_file | sort 
some blah! blah!|201421|some blah! blah! 
some blah! blah!|201431|some blah! blah! 
some blah! blah!|201441|some blah! blah! 
some blah! blah!|201451|some blah! blah!