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
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?
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'
Tags sed