如何在bash(一个空格分隔的平面文件)中排序?
如果有一个平面文件数据库,其中的字段由空格分隔,如下所示:如何在bash(一个空格分隔的平面文件)中排序?,bash,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 (...) 我想按工资和成本来订购这些东西。我可以用这种东西点这个
Name Salary_cost function
Luc 50000 Engineer in mechanics
Gerard 35000 Bad in all, good at nothing
Martijn 150000 Director
Robert 45000 Java Specialist
(...)
我想按工资和成本来订购这些东西。我可以用这种东西点这个
cat file.txt | sed-e 's/ \+/\t/g' | sort -k 2
但这不好,因为
- 第一行不是要排序的数据(只是将其放在顶部或底部,有时,天知道在哪里…)
- 如果字段的顺序改变或者我添加了一些文件,那么我必须重写
- 这很复杂。我使用number来指定字段名,这些字段名是string(而不是number)
- 它不优雅
- 数据被修改
有许多接口产生这种输出,例如:测向、远程传输、ps。。。即使是分开的文件也接近这种结构。您可以使用带有排序的头、尾组合:
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
fld=“工资成本”
n=$(awk-v q=“$fld””NR==1{for(i=1;iYes,但“工资成本”替换为不清楚的“2”。