2014-06-17 73 views
2

我正在嘗試對文件進行排序並將輸出存儲到tmp文件中。這是我的文件看起來像:如何在bash中的某一行之後對文件進行排序?

this_is_my_file(不帶擴展名)

Names Last_Name_Initial 
--- 
Alex G 
Nick D 
Jon J 
Cain V 
Anderson S 
Chris W 

我知道命令排序的文件是sort -n $PWD/this_is_my_file -o tmp但如何我開始---後排序?還有一個後續問題,如果您正在比較的文件沒有擴展名,那麼如何區分文本或xml文件?

+0

您可以通過第二列進行排序,因爲它不具有''--- – Rahul

+0

@Rahul我想第一列 – Alias

回答

2

您可以使用:

head -n 2 file && tail -n +3 file | sort 
Names Last_Name_Initial 
--- 
Alex G 
Anderson S 
Cain V 
Chris W 
Jon J 
Nick D 

它的工作如下:

  1. 用途head -n 2獲得第2個標題行
  2. 用於tail -n +3獲得從3號線
  3. 開始的所有行
  4. 管道tail的輸出sort
  5. 梅傑斯頭與tail+sort輸出使用&&

重定向輸出您可以使用貝分組{...}

{ head -n 2 file && tail -n +3 file | sort; } > output 
+0

排序,你能解釋一下代碼呢? – Alias

+0

解釋在答案中添加。 – anubhava

+0

如何將輸出重定向到另一個文件? 'head -n 2 file && tail -n +3 file | sort> tmp'? – Alias

1

你可以使用一個分組構造:

{ 
    # read and print the first 2 lines 
    read line; echo "$line" 
    read line; echo "$line" 
    # and sort the rest 
    sort 
} < this_is_my_file 

此外,AWK :

awk 'NR <= 2 {print; next} {print | "sort"}' this_is_my_file 

後續回答:一般來說,在unix-y系統中,名稱文件不保證文件的內容。但是,你能看到什麼file命令說,有關文件:

$ cat > contains_xml 
<?xml version="1.0" encoding="ISO-8859-1" ?> 
<foo> 
<bar>baz</bar> 
</foo> 
$ file contains_xml 
contains_xml: XML document text 
$ cat > not_really.xml 
this is plain text 
$ file not_really.xml 
not_really.xml: ASCII text 
相關問題