要求打印,第一列相同的头两行和后两行:
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
要求输出结果为:
EX BX 1
EX BX a
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
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]]}' file
解析:处理方法巧妙的地方在于利用了一个二维的数据进行处理。两个都是用$1作为下标,其中数组b中存放了,开头为每个不同元素的数据的条数。最后的结果b[i]的话就是开头是$1的列的数量。最后进行输出即可。