Еще один простой подход с tac
и awk
.
tac Input_file | awk '$0=="text2 valueX"{print;getline;print}' | tac
Вывод будет следующим.
text1 valueA valueN valueB
text2 valueX
text1 valueC valueN valueD
text2 valueX
text1 valueI valueN valueJ
text2 valueX
Некоторые strace
из tac
(обработки произвольного файла):
lseek(3, 351051776, SEEK_SET) = 351051776
read(3, "83,10.1579,56.1257,1412067900\n41"..., 8192) = 8192
write(1, "104,210,84,194,10.1313,56.1528,1"..., 4096) = 4096
write(1, "2092,56.1724,1412068200\n129,20,3"..., 4096) = 4096
lseek(3, 351043584, SEEK_SET) = 351043584
read(3, "7900\n148,159,77,186,97,10.2090,5"..., 8192) = 8192
write(1, ",140,182,10.1208,56.1784,1412067"..., 4096) = 4096
write(1, "10.1859,56.1239,1412067900\n53,17"..., 4096) = 4096
lseek(3, 351035392, SEEK_SET) = 351035392
Вы можете увидеть убывающую позицию в lseek
.