shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[shell-script] sed emulando head -n 1 e tail -2 filtrando o meio


From: Julio Quierati
Subject: [shell-script] sed emulando head -n 1 e tail -2 filtrando o meio
Date: Thu, 18 Nov 2010 19:54:45 -0200

Olá Lista,


Tenho um arquivo com o seguinte formato com n linhas conforme o modelo
abaixo

0211070250520100928022505201025052010000031

10560704717499612301           0007415   7791259913
000772505201007410500020300019002000000000000  0000003R

10850704577499797055           0007499   8781000282
000872505201007504300005000007003870000000000  0000004R

10560700707499946523           0007115   7581070561
000752505201007515900002200005002000000000000  0000005R

20560700447199883145           0007115   4191057039
000412505201007541300004500006003000000000000  0000007R

10560700707199879410           0007515   7199752444
000712505201007501500021000020002000000000000  0000008R
20850700107191314938           0007199   1174803037
000112505201007583100003500005003110000000000  0000236R

10580700747199090110           0007915   7591982260
000752505201007284700011300010002790000000000  0000238R

90000312000000000000000000

^$ - linha em branco

Preciso conservar a 1 e as 2 ultimas linhas e as demais que comecem com 2
apagando as demais.
Lembrando que ultima linha do arquivo é ^$ =D

A saida esperada seria essa:

0211070250520100928022505201025052010000031
20560700447199883145           0007115   4191057039
000412505201007541300004500006003000000000000  0000007R
20850700107191314938           0007199   1174803037
000112505201007583100003500005003110000000000  0000236R
20560700447199883145           0007115   4191057039
000412505201007541300004500006003000000000000  0000007R
20850700107191314938           0007199   1174803037
000112505201007583100003500005003110000000000  0000236R
90000312000000000000000000

^$ - linha em branco

para as linhas que comecem com 2 foi tranquilo =D
sed -i '{1p;/^2/!d}' arquivo.txt

Mas e para conservar as 2 ultimas linhas ?

Procurando um pouco encontrei
 sed  -e :a -e '{$q;N;3,$D;ba}' arquivo.txt

Mas nao consegui imprimir a 1 e filtrar o meio.

Em awk consegui, depois de algum tempo procurando =D tail -2

awk 'NR==1 {print};/^2/ {print};{y=x "\n" $0; x=$0};END{print y}'
arquivo.txt

Mas necessito da linda  opcao -i do sed, awk tem algo parecido, vim?
Necessito de uma luz!

Atenciosamente,

Julio Quierati
User Linux #492973


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]