cat file:AX BX 1
AX BX 2
AX BX 1
AX BX 8
AX BX 1
AX BX 3
AX BX 5
CX BX 1
CX BX 0
CX BX 1
CX BX 6
CX BX 9
EX BX 1
EX BX a
EX BX 1
EX BX 1
EX BX 1
EX BX 6
EX BX 1
EX BX 1
EX BX 1
EX BX 1
EX BX x
EX BX y
要求打印第一列相同的头两行和末尾两行:
AX BX 1
AX BX 2
AX BX 3
AX BX 5
CX BX 1
CX BX 0
CX BX 6
CX BX 9
EX BX 1
EX BX a
EX BX x
EX BX y
- awk '{a[$1,++b[$1]]=$0}END{for(i in b)print a[i,1]"\n"a[i,2]"\n"a[i,b[i]-1]"\n"a[i,b[i]]"\n"}' file
[解析] 利用我们的老朋友数组来操作, 数组a来保存每一行的内容, 因为要打印头两行和末尾两行, 那么必须要知道首字段相同的内容的行数, 这里用b数组来统计行数, 有两个精妙之处, 第一: 获得了首字段的内容, 在数组b里是下标, 第二: 统计了第一列相同的内容的行数. END最后用for循环取出下标, 然后输出数组a的值.
阅读(5273) | 评论(2) | 转发(1) |