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

[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/>





reply via email to

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