Há mais de um problema com o script, além disso, a declaração do problema precisa de alguns esclarecimentos:
- a chamada gsub tem a expressão regular no parâmetro errado
- atualizar
$1
não tem efeito em$0
(o valor usado na instruçãoprint
) - OP não esclareceu se a intenção era deixar a última ocorrência em uma linha intocada, ou apenas a última linha contendo a data (a última é mais provável).
Aqui está um script que incorpora essas correções e suposições:
#!/bin/sh
awk '
BEGIN { row=0; fixup = -1; }
{
before[row] = $0;
gsub("2016/01/30 14:52:51: ", "", $0);
if ( $0 != before[row] ) {
fixup = row;
}
after[row++] = $0;
}
END {
if (fixup >= 0) {
after[fixup] = before[fixup];
}
for (n = 0; n < row; ++n) {
print after[n];
}
}
'
(usar dois arrays é menos eficiente, mas permite modificações adicionais com menos esforço do que sem o array before
).
Eu testei isso fazendo um arquivo de entrada ( foo.in
):
1awk '{gsub(//,"2016/01/30 14:52:51: ",$1);print}'
2awk '{gsub(//,"2016/01/30 14:52:51: ",$1);print}'
3awk '{gsub(//,"2016/01/30 14:52:51: ",$1);print}'
4awk '{gsub(//,"2016/01/30 14:52:51: ",$1);print}'
e executando o script assim:
./foo <foo.in
e obtivemos
1awk '{gsub(//,"",$1);print}'
2awk '{gsub(//,"",$1);print}'
3awk '{gsub(//,"",$1);print}'
4awk '{gsub(//,"2016/01/30 14:52:51: ",$1);print}'