sed: obtém 2 linhas de uma única

2

Eu tenho uma lista de nomes de arquivos como id-datetime.txt , uma para cada linha, onde id é sempre a mesma e datetime é ordenada.

Eu preciso da primeira e da última datetime, por isso, ter um sed_script em uma variável $script que o agarra, eu posso fazer

sed -nr "1 $script p; \$ $script'

Eu obtenho

datetime (oldest)
datetime (newest)

também trabalhando com uma lista de arquivos únicos.

Agora, o que acontece se eu quiser também obter outra linha com o id como

id
datetime (oldest)
datetime (newest)

existe uma maneira (fácil) de editar a linha 1 duas vezes, de forma que ela forneça duas linhas separadas?

    
por neurino 06.05.2011 / 11:50

2 respostas

4

Ok, eu entendi

1 {
    #hold the line
    h
    #extract id
    s|^([0-9]{6}).*||; p
    #put line back again
    g
    #get datetime
    $sed_str
}

esta parte do script sed irá imprimir (e editar) a primeira linha duas vezes

    
por 06.05.2011 / 12:35
3

Então você quer extrair alguns dados da primeira linha e da última linha? Basta usar um único comando para cada, imprimindo duas linhas na primeira vez.

sed -n -e '1s/^\(.*\)-\(.*\)\.txt$/\
/p' -e '$s/^\(.*\)-\(.*\)\.txt$//p'

Você pode achar o awk mais claro se for mais trabalhoso.

awk -F- '{gsub(/\.[^.]*$/,"");
          dt=$2}
         NR==1 {print $1; print $2}
         END {print dt}'

Ou Perl.

perl -l -ne 's/\.[^.]*$//;
             /^(.*)-(.*)$/ or next;
             print $1 if $.==1;
             print $2 if $.==1 || eof'
    
por 06.05.2011 / 15:57

Tags