Sponsored Content
Top Forums Programming Delete specific lines in a text file Post 78363 by jim mcnamara on Tuesday 19th of July 2005 11:04:56 AM
Old 07-19-2005
This is a start
Code:
/* last100 */
/* usage - last100 <filename> lines_to_keep */
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

typedef int fildes;
/* read a buffer */
ssize_t readall(fildes fd, void *buf, size_t nbyte){
     ssize_t nread = 0;
     ssize_t n=0;

     do {
         if ((n = read(fd, &((char *)buf)[nread], nbyte - nread)) == -1) {
             if (errno == EINTR)
                 continue;
             else
                 return (-1);
         }
         if (n == 0)
             return nread;
         nread += n;
     } while (nread < nbyte);
     return nread;
}

char  *process_file(fildes in, char *buf, size_t *len)
{
	struct stat st;
    if (fstat(in,&st)==(-1) )          /* get file size in bytes */
    {
        perror("Cannot stat file");    /* error */
        exit(EXIT_FAILURE);
    }
    *len=(size_t)st.st_size+1;
    buf=malloc((size_t)st.st_size+1);          /* allocate memory for whole file */
    if(buf==NULL)
    {
        perror("Memory allocation failure");	/* mem error */
        exit(EXIT_FAILURE);
    }
    memset(buf,0x0,(size_t)st.st_size+1);
    if(readall(in,buf,(size_t) st.st_size)==(-1)) /* read in whole file */
    {
        perror("Error on file read");   /* error */
        exit(EXIT_FAILURE);	
    }
	return buf;
}

char *position_ptr(char *p,size_t *len, long linecount)
{
    size_t pos=*len;	
    while (pos && linecount>(-1))
    {
    	if( *(p+pos--)=='\n') linecount--;    	
    }
    p+=pos;
    p++; /* skip first newline */
    *len-=pos;
    return p;
}

int main(int argc, char *argv[])
{
    
    size_t len=0;
    char *buf=NULL;
    char *p=NULL;
    fildes in=open(argv[1],O_RDONLY);  /* low-level file open */
    
    if(in==(-1))                      /* error check */
    {
        perror("Error opening input file");
        exit(EXIT_FAILURE);
    }
    buf=process_file(in,buf,&len);
    p=position_ptr(buf,&len,atol(argv[2]));
    fprintf(stdout,"%s",p);
    free(buf);                        /* clean up and exit */    
    if(close(in))
    {
         perror("File close error");
         exit(EXIT_FAILURE);	
    }    
    return 0;
}

 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Delete blocks of lines from text file

Hello, Hello Firends, I have file like below. I want to remove selected blocks say abc,pqr,lst. how can i remove those blocks from file. zone abc { blah blah blah } zone xyz { blah blah blah } zone pqr { blah blah blah } (4 Replies)
Discussion started by: nrbhole
4 Replies

2. Shell Programming and Scripting

Delete lines prior to a specific date in a log file.

Hi all. I have a database log file in which log data get appended to it daily. I want to do a automatic maintainence of this log by going through the log and deleting lines belonging to a certain date. How should i do it? Please help. Thanks. Example. To delete all lines prior to Jun... (4 Replies)
Discussion started by: ahSher
4 Replies

3. Shell Programming and Scripting

Delete specific lines from a file

Hi, I have a file ( all_users.ldif ) of the following format: cn=orcladmin, cn=Users, dc=maximus,dc=com cn=PUBLIC, cn=Users, dc=maximus,dc=com cn=portal,cn=users,dc=maximus,dc=com cn=portal_admin,cn=users,dc=maximus,dc=com cn=uddi_publisher,cn=Users,dc=maximus,dc=com... (4 Replies)
Discussion started by: itzz.me
4 Replies

4. Shell Programming and Scripting

[bash help]Adding multiple lines of text into a specific spot into a text file

I am attempting to insert multiple lines of text into a specific place in a text file based on the lines above or below it. For example, Here is a portion of a zone file. IN NS ns1.domain.tld. IN NS ns2.domain.tld. IN ... (2 Replies)
Discussion started by: cdn_humbucker
2 Replies

5. Shell Programming and Scripting

how to delete lines from a file which starts with a specific pattern

I need to delete those lines from a file, which starts with 45. How to do it? (3 Replies)
Discussion started by: mady135
3 Replies

6. Shell Programming and Scripting

How to delete lines from text file?

hi guys, I have very large txt files (200GB) and just want to to delete the first two lines (headers). So far I used sed -i '1,2d' infile.txtbut this command always takes extremely long as it writes all again. Is there a better way to do it (ie just to delete the lines without writing all... (2 Replies)
Discussion started by: TuAd
2 Replies

7. UNIX for Dummies Questions & Answers

How to delete specific lines (2n+3 line, n=0,1,2...296) in a file?

Dear everyone, I have a file with 900 lines (there is only numbers in one line, no string), I only need the lines 2+3n (n=0,1...296), i.e line 2, 5, 8, 11...888. I tried google but only the results such as how to delete all the odd lines or all the even lines with 'awk' command. Thanks in... (4 Replies)
Discussion started by: phamnu
4 Replies

8. Shell Programming and Scripting

How to delete lines of a text file based on another text file?

I have 2 TXT files with with 8 columns in them(tab separated). First file has 2000 entries whereas 2nd file has 300 entries. The first file has ALL the lines of second file. Now I need to remove those 300 lines (which are in both files) from first file so that first file's line count become... (2 Replies)
Discussion started by: prvnrk
2 Replies

9. Shell Programming and Scripting

Delete specific lines from files based on another file

I have some text files in a folder named ff as follows. I need to delete the lines (in-place editing)in these files based on another file aa.txt. 32bm.txt: 249 253 A P - 0 0 8 0, 0.0 6,-1.4 0, 0.0 2,-0.4 -0.287 25.6-102.0 -74.4 161.1 37.1 13.3 10.9 250... (2 Replies)
Discussion started by: aden
2 Replies

10. Shell Programming and Scripting

Delete lines above and below specific line of text

I'm trying to remove a specific number of lines, above and below a specific line of text, highlighted in red: <STMTTRN> <TRNTYPE>CREDIT <DTPOSTED>20151205000001 <TRNAMT>10 <FITID>667800001 <CHECKNUM>667800001 <MEMO>BALANCE </STMTTRN> <STMTTRN> <TRNTYPE>DEBIT <DTPOSTED>20151207000001... (8 Replies)
Discussion started by: bomsom
8 Replies
insdelln(3XCURSES)					  X/Open Curses Library Functions					insdelln(3XCURSES)

NAME
insdelln, winsdelln - insert/delete lines to/from the window SYNOPSIS
cc [ flag... ] file... -I /usr/xpg4/include -L /usr/xpg4/lib -R /usr/xpg4/lib -lcurses [ library... ] c89 [ flag... ] file... -lcurses [ library... ] #include <curses.h> int insdelln(int n); int winsdelln(WINDOW *win, int n); PARAMETERS
n Is the number of lines to insert or delete (positive n inserts; negative n deletes). win Is a pointer to the window in which to insert or delete a line. DESCRIPTION
The insdelln() and winsdelln() functions insert or delete blank lines in stdscr or win, respectively. When n is positive, n lines are added before the current line and the bottom n lines are lost; when n is negative, n lines are deleted starting with the current line, the remaining lines are moved up, and the bottom n lines are cleared. The position of the cursor does not change. RETURN VALUES
On success, these functions return OK. Otherwise, they return ERR. ERRORS
None. ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Standard | +-----------------------------+-----------------------------+ |MT-Level |Unsafe | +-----------------------------+-----------------------------+ SEE ALSO
deleteln(3XCURSES), insertln(3XCURSES), libcurses(3XCURSES), attributes(5), standards(5) SunOS 5.11 5 Jun 2002 insdelln(3XCURSES)
All times are GMT -4. The time now is 07:41 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy