使用sort -k格式化文本文件

时间:2018-11-04 16:43:43

标签: bash sh

我被困在使用sort命令将students.txt输出到4个单独的列中。我已经尝试过sort -k 4n的路线,但是仍然行不通。

我希望能够将students.txt输出到第一个awk语句标题下的4列数据中:

awk 'BEGIN{printf "%-12s %-9s %-12s %-12s\n", "Family Name", "initials", 
"Interviewer Initials", "Interview Time"}'
awk '{printf "%-12s %-9s %-12s %-12s\n", $1,$2,$3,$4}' | students.txt | sort - 
k3.4

2 个答案:

答案 0 :(得分:1)

您需要对分隔符进行排序。您的情况是逗号符号。 这是如何对逗号分隔的输入的第3列进行排序。

~ $ cat example.txt 
foo,bar,baz
aoo,bug,bug
foo,zzz,boo

$ sort -t, -k 3 example.txt 
foo,bar,baz
foo,zzz,boo
aoo,bug,bug

答案 1 :(得分:1)

我准备了一个名为students.txt的文件,听起来像您正在处理的文件。我将采访的结果添加到另一栏:

Smith   A RCB 09:00  Good
Smith   A TEA 12:00  Bad
Jones   B DEF 12:00  Bad
Aaron   A BZD 12:00  Ugly
Roberts C RCB 12:00  Good
Smith   A JRR 10:30  Good
Aaron   R RCB 10:30  Bad

此脚本应该足以使您了解排序所需的内容:

sort  -k4,4 -k1,2 students.txt |
awk  'BEGIN {printf "%-12s %-9s %-20s %-20s\n", "Family Name", "Initials", "Interviewer Initials", "Interview Time"}
{printf "%-12s %-9s %-20s %-20s\n", $1,$2,$3,$4}'

结果是:

Family Name  Initials  Interviewer Initials Interview Time
Smith        A         RCB                  09:00
Aaron        R         RCB                  10:30
Smith        A         JRR                  10:30
Aaron        A         BZD                  12:00
Jones        B         DEF                  12:00
Roberts      C         RCB                  12:00
Smith        A         TEA                  12:00
  1. sort正在使用空格来确定要对哪些字段进行排序。注意,我在第4列上进行排序,然后在第1列和第2列进行排序。如果在第4列之后省略了,4,则排序将一直进行到记录结束,因此Ugly采访将在12列中排在最后: 00条记录。
  2. 您只需运行一次awk,BEGIN块将在启动时运行以打印标题。
  3. 下一个awk块使用指定的格式打印出感兴趣的四列。