列表加上表头

 
  
  1. awk 'BEGIN {print "ID\tTime"}{printf("%s\t%s\n",$1,$2)}' arr.dat 

输出结果:

 
  
  1. ID  Time 
  2. 1034    7:26 
  3. 1025    7:27 
  4. 1101    7:32 
  5. 1006    7:45 
  6. 1012    7:46 
  7. 1028    7:49 
  8. 1051    7:51 
  9. 1029    7:57 
  10. 1042    7:59 
  11. 1008    8:01 
  12. 1052    8:05 
  13. 1005    8:12 
  14. 1005    8:13 
  15. 1005    8:13 
  16. 1005    8:13 

如果我们要将ID重复的去除,并附加上表头该怎么写呢?

试下如下的程序:

 
  
  1. awk 'BEGIN {print "ID\tTime"}{printf("%s\t%s\n",$1,$2)| "sort -k1,1 -u -r"}' arr.dat 

好长的一行,看一下输出结果:

 
  
  1. ID  Time 
  2. 1101    7:32 
  3. 1052    8:05 
  4. 1051    7:51 
  5. 1042    7:59 
  6. 1034    7:26 
  7. 1029    7:57 
  8. 1028    7:49 
  9. 1025    7:27 
  10. 1012    7:46 
  11. 1008    8:01 
  12. 1006    7:45 
  13. 1005    8:12 

果然按ID进行了倒排序,并附加上了表头,ID也去重了。上面的这个例子算是比较复杂了,程序依次干了下面的事:

  1. 在文件处理之前输出了表头
  2. 将第一列和第二列格式化输出
  3. 将第二步的输出结果通过管道交由sort命令进行去重排序