[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Fwd: Re: [shell-script] Remover a ultima linha do arquivo]
From: |
Ricardo Brito do Nascimento |
Subject: |
[Fwd: Re: [shell-script] Remover a ultima linha do arquivo] |
Date: |
Mon, 14 Apr 2008 10:33:21 -0300 |
User-agent: |
Thunderbird 2.0.0.5 (X11/20070719) |
Que tal assim!!!
$ sed "`wc -l arq2.xml|awk '{print $1}'`d" arq2.xml > /tmp/a && mv
/tmp/a arq2.xml
Gerei o arq1.xml somente para comparação com diff.
$ sed "`wc -l arq2.xml|awk '{print $1}'`d" arq2.xml > /tmp/a && mv
/tmp/a arq1.xml
$ diff arq1.xml arq2.xml
29a30
> ..ID_DOCUMENTO:27
-------- Mensagem original --------
Assunto: Re: [shell-script] Remover a ultima linha do arquivo
Data: Sun, 13 Apr 2008 17:28:09 -0300 (ART)
De: <address@hidden>
Responder a: address@hidden
Para: address@hidden
--- zoreuga <address@hidden
<mailto:eduardo.queiroz%40gmail.com>> escreveu:
> Olá Pessoal,
>
> Tenho uma partição com 90 GB de espaço total onde
> consta um
> arquivo .txt de 70 GB preciso remover a ultima linha
> deste arquivo sem
> gerar um novo, já que não tenho espaço suficiente?
>
> Com a expressão abaixo removeria a linha mas teria
> que gerar um novo
> arquivo!
>
> cat arquivo.txt | sed '450000d' > novo_arquivo.txt
>
> 70 GB +
> 70GB = 140GB
>
> Alguém sabe como posso fazer?
>
>
Não sei se já resolveu..., e como as mensagens que vi
de resposta acho que não resolveram o problema, tive
uma idéia que talvez resolva o problema, está certo
não é shell, mas talvez esta aí seja a única solução.
Não tenho tanta certeza de que não vai ser criado um
arquivo temporário, mas acho que não vai.
Não está muito bem feito, só aproveite a oportunidade
para treinar a minha programação em C.
$ gcc -o dellines dellines.c
Se o seu arquivo possui um '\n' no final da última
linha, o que você quer provavelmente é deletar duas
linhas.
$ dellines arq.txt 2
se não tem o '\n' no final
$ dellines arq.txt 1
Não esqueça de dizer se funcionou...
--------------
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
FILE *FH;
char lastChar;
int pos = 0;
int nLines = 0;
int linesToDelete = 0;
if(argc != 3){
printf("usage %s <filename> <number of lines to
delete>\n", argv[0]);
exit(1);
}
linesToDelete = atoi(argv[2]);
if((FH = fopen(argv[1], "rb+")) != NULL){
fseek(FH, 0, SEEK_END);
while(fseek(FH, -1 * sizeof(char), SEEK_CUR) ==
0){
lastChar = fgetc(FH);
fseek(FH, -1 * sizeof(char), SEEK_CUR);
if(lastChar == '\n'){
nLines++;
if(linesToDelete == nLines){
break;
}
}
}
pos = ftell(FH);
fclose(FH);
if(pos != 0){
printf("deletando %d lines; mantendo %d
bytes\n", nLines, pos);
truncate(argv[1], pos * sizeof(char));
}
}else{
perror("Falha ao abrir arquivo para escrita");
exit(2);
}
return 0;
}
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para
armazenamento!
http://br.mail.yahoo.com/ <http://br.mail.yahoo.com/>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Fwd: Re: [shell-script] Remover a ultima linha do arquivo],
Ricardo Brito do Nascimento <=