2013-12-21 61 views
2

如果有哪些字段之間用空格這樣分隔的平面文件數據庫:如何在bash中訂購空間分隔的平面文件?

Name Salary_cost function 
Luc  50000  Engineer in mechanics 
Gerard 35000  Bad in all, good at nothing 
Martijn 150000  Director 
Robert 45000  Java Specialist 
(...) 

我想通過Salary_cost訂購此材料。我可以訂購使用這種東西

cat file.txt | sed-e 's/ \+/\t/g' | sort -k 2 

但是,這是不行的,因爲

  • 第一行是不被訂購(只純粹的危險把它的頂部或底部數據或者有時候,上帝知道在哪裏......)。
  • 如果字段順序改變或我添加一些文件,那麼我必須重寫...
  • 這很複雜。我使用數字來指定字符串(而不是數字)的字段名稱。
  • 這不是優雅。
  • 數據被修改。
  • ...

我也曾想過像Recutils。但我無法掌握如何使用它。

我可以使用命令行界面(bash,sh,ksh,...),通過「Salary_cost」字段對此文件進行排序,將其他行視爲記錄,將第一個視爲數據標題?

有很多接口產生這樣的輸出,例如:df,transmission-remote,ps,...即使是彗星分離的文件也接近這個結構。

回答

1

您可以使用頭,尾組合排序管道:

fld="Salary_cost" 

n=$(awk -v q="$fld" 'NR==1{for (i=1; i<=NF; i++) if ($i==q) {print i; exit}}' file) 

head -1 file && tail -n +2 file | sort -nk$n 
Name Salary_cost function 
Gerard 35000  Bad in all, good at nothing 
Robert 45000  Java Specialist 
Luc  50000  Engineer in mechanics 
Martijn 150000  Director 
+0

是的,但「Salary_cost」由不清楚「2」所取代。 –

+0

在這裏我不明白你說的是什麼意思? – anubhava

+0

我想我找到了你。查看更新的答案。 – anubhava