Text-Processing

排序但保持標題行在頂部

  • April 7, 2020

我從一個程序中獲取輸出,該程序首先生成一行是一堆列標題,然後是一堆數據行。我想剪切這個輸出的各個列並查看它根據各個列排序。如果沒有標題,則可以通過-k選項sortcutawk查看列的子集輕鬆完成剪切和排序。但是,這種排序方法將列標題與輸出的其餘行混合在一起。有沒有一種簡單的方法可以將標題保持在頂部?

竊取 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 { ... } <>'

引用自:https://unix.stackexchange.com/questions/11856