Text-Processing
排序但保持標題行在頂部
我從一個程序中獲取輸出,該程序首先生成一行是一堆列標題,然後是一堆數據行。我想剪切這個輸出的各個列並查看它根據各個列排序。如果沒有標題,則可以通過
-k
選項sort
與cut
或awk
查看列的子集輕鬆完成剪切和排序。但是,這種排序方法將列標題與輸出的其餘行混合在一起。有沒有一種簡單的方法可以將標題保持在頂部?
竊取 Andy 的想法並使其成為一個函式,以便更易於使用:
# print the header (the first line of input) # and then run the specified command on the body (the rest of the input) # use it in a pipeline, e.g. ps | body grep somepattern body() { IFS= read -r header printf '%s\n' "$header" "$@" }
現在我可以這樣做:
$ ps -o pid,comm | body sort -k2 PID COMMAND 24759 bash 31276 bash 31032 less 31177 less 31020 man 31167 man ... $ ps -o pid,comm | body grep less PID COMMAND 31032 less 31177 less
您可以使用 bash 將標題保持在頂部:
command | (read -r; printf "%s\n" "$REPLY"; sort)
或者用 perl 來做:
command | perl -e 'print scalar (<>); print sort { ... } <>'