在跳过空白行的同时循环遍历文件

Looping through a file while skipping the blank rows

我有一个格式如下的文件

value value 17 -1 1234 4567 value id1
value value 17 -1 2345 4580 value id1
value value 17 -1 2344 4654 value id1

value value 1 1 1234 4567 value id2
value value 1 1 3445 3455 value id2

value value 1 1 2341 2345 value id3
value value 1 1 1245 4567 value id3
value value 1 1 3234 5634 value id3
value value 1 1 3412 4512 value id3

我想为空白行之间的每组行检索以下信息:

例如对于 id1:

17 -1 1234 4654 id1

对于 id2:

1 1 1234 3455 id2

即对于每个 id(最后一列),我想检索该组第一行的第 5 列和该组最后一行的第 6 列(这些行按 id 分组)。

像这样的东西可能会为你工作

$ awk '/^$/{print col3, col4, col5, col6, idval; next}  != idval{idval = ; col3=; col4=; col5=} {col6=} END{print col3, col4, col5, col6, idval}' input
17 -1 1234 4654 id1
1 1 1234 3455 id2

使用 GNU awk

awk -vRS= -vFS='\n' '{split(, a, /[[:blank:]]+/);
split($NF, b, /[[:blank:]]+/); 
print a[3], a[4], a[5], b[6], a[8]}' file
17 -1 1234 4654 id1
1 1 1234 3455 id2
1 1 2341 4512 id3

这是另一个awk

awk -vRS= '{print ,,,$(NF-2),}' file
17 -1 1234 4654 id1
1 1 1234 3455 id2
1 1 2341 4512 id3

这将每个块划分为一条记录,然后打印字段 3,4,5 倒数第三和 8