Script to delete few rows from a file and then update header

 
Thread Tools Search this Thread
Special Forums UNIX and Linux Applications Script to delete few rows from a file and then update header
# 1  
Old 02-19-2013
Script to delete few rows from a file and then update header

Code:
HJKL1Name00014300010800000418828124201


Code:
L201207022012070228XAM  00000000031795404  001372339540000000000000000000000                                   COOLTV KEYA
    Zx00        xI-50352202553           00000000
                        00000000    G000000000000           00000000  2160101003
L000000000000000028     00000000040        001372339540000000000000000000000   MSRCO2
                                         000000000
                        00000000     G000000000000           00000000  2160101003


I have file with 108 lines in it like above (2 lines) this is having COOLTV , they have other names
I want to open file and remove line which has COOLTV mentioned init and also want to delete immediate next line. these two lines can be any where in the file.

then once it delete in the header it should also update 108 as 106 because we delete 2 lines and it should change 00000418828124201 to 00000514443225 (00000418828124201 - 00137233954 = 00000514443225)

Header after modify should look like

HJKL1Name0001430001060000051444322201

it should keep orginal file there and should make new file will all these changes

106 will be word count and 0000051444322 is remaining after subtracting 00137233954
how can we do it using awk or shell
# 2  
Old 02-19-2013
Code:
awk ' NR == 1 {
                HF = substr($0,1,15);
                HC = substr($0,16,6);
                HR = substr($0,22);
} /COOLTV/ {
                R  = $3;
                sub(/0+$/,x,R);
                $0 = ""; getline; $0 = "";
                HC -= 2;
                HR -= R;
} !/COOLTV/ {
                print $0 > "newfile";
} END {
                printf "%s%06d%017d", HF, HC, HR > "header";
} ' file

HDR=$( cat header )

awk -v H="$HDR" 'NR==1{ sub($0,H) }1' newfile

Note: Use nawk for SunOS or Solaris
# 3  
Old 02-19-2013
removed

Last edited by mirwasim; 02-21-2013 at 12:00 AM..
# 4  
Old 02-19-2013
Try this modified code. Make necessary adjustments as per your requirement:
Code:
awk ' NR == 1 {
                HF = substr($0,1,15);
                HC = substr($0,16,6);
                HR = substr($0,22,14);
                HE = substr($0,36);
} /COOLTV/ {
                R  = $3;
                sub(/0+$/,x,R);
                HC -= 2;
                HR -= R;
                getline; next;
} !/COOLTV/ {
                print $0 > "newfile";
} END {
                printf "%s%06d%014d%d", HF, HC, HR, HE > "header";
} ' file

HDR=$( cat header )

awk -v H="$HDR" 'NR==1{ sub($0,H) }1' newfile

# 5  
Old 02-20-2013
Quote:
Originally Posted by bipinajith
Try this modified code. Make necessary adjustments as per your requirement:
Code:
awk ' NR == 1 {
                HF = substr($0,1,15);
                HC = substr($0,16,6);
                HR = substr($0,22,14);
                HE = substr($0,36);
} /COOLTV/ {
                R  = $3;
                sub(/0+$/,x,R);
                HC -= 2;
                HR -= R;
                getline; next;
} !/COOLTV/ {
                print $0 > "newfile";
} END {
                printf "%s%06d%014d%d", HF, HC, HR, HE > "header";
} ' file

HDR=$( cat header )

awk -v H="$HDR" 'NR==1{ sub($0,H) }1' newfile

Hello Bipinajith
The Header file which gets created is not replacing header in newfile

when I tried separately i saw it printed value but when I did cat of file it was not appearing there
Code:
[wasim]$ HDR=$( cat header )
[wasim]$ echo $HDR
HJKL1Name00014200011800000463190664201
[wasim]$ nawk -v H="$HDR" 'NR==1{ sub($0,H) }1' check.txt
HJKL1Name00014200011800000463190664201
[wasim]$ cat check.txt
HJKL1Name00014200012000000600424618201


Last edited by mirwasim; 02-20-2013 at 01:29 AM..
# 6  
Old 02-20-2013
It works for me with the sample content you posted!

You can debug the code by putting print statements in it and see the values computed for each records processed.
# 7  
Old 02-20-2013
[QUOTE=bipinajith;302771351]It works for me with the sample content you posted!

Last edited by mirwasim; 02-21-2013 at 12:04 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash script - How to update header of scripts in one pass - multiline search/replace

Hello. A find command return a list of file. For each fileReplace the content starting with the first "§" (of two) ending with last "ɸ" (of two), regardless of the content ( five lines ) by the following content (exactly) : §2019_08_23§ # # ... (8 Replies)
Discussion started by: jcdole
8 Replies

2. Shell Programming and Scripting

Script to delete rows in a file

Hi All, I am new to UNIX . Please help me in writing code to delete all records from the file where all columns after cloumn 5 in file is either 0, #MI or NULL. Initial 5 columns are string e.g. "alsod" "1FEV2" "wjwroe" " wsse" "hd3" 1 2 34 #Mi "malasl" "wses" "trwwwe" " wsse" "hd3" 1 2 0... (4 Replies)
Discussion started by: alok2082
4 Replies

3. Shell Programming and Scripting

Manipulate all rows except header, but header should be output as well

Hello There... I have a sample input file .. number:department:amount 125:Market:125.23 126:Hardware store:434.95 127:Video store:7.45 128:Book store:14.32 129:Gasolline:16.10 I will be doing some manipulations on all the records except the header, but the header should always be... (2 Replies)
Discussion started by: juzz4fun
2 Replies

4. Shell Programming and Scripting

Awk/sed script for transposing any number of rows with header row

Greetings! I have been trying to find out a way to take a CSV file with a large number of rows, and a very large number of columns (in the thousands) and convert the rows to a single column of data, where the first row is a header representing the attribute name and the subsequent series of... (3 Replies)
Discussion started by: tntelle
3 Replies

5. Shell Programming and Scripting

Delete unique rows - optimize script

Hi all, I have the following input - the unique row key is 1st column cat file.txt A response C request C response D request C request C response E request The desired output should be C request (7 Replies)
Discussion started by: varu0612
7 Replies

6. Shell Programming and Scripting

Script to delete a rogue header added by hacker

Hi, Someone hacked my site(s) and appended a header to every .php file in every domain. With several Word Press sites, you can imagine how many files that is! I hand edited some, but it is just a huge task to edit the thousands of files. I was a long time Linux scripter, but have not done... (5 Replies)
Discussion started by: SwankPad
5 Replies

7. Shell Programming and Scripting

delete rows in a file based on the rows of another file

I need to delete rows based on the number of lines in a different file, I have a piece of code with me working but when I merge with my C application, it doesnt work. sed '1,'\"`wc -l < /tmp/fileyyyy`\"'d' /tmp/fileA > /tmp/filexxxx Can anyone give me an alternate solution for the above (2 Replies)
Discussion started by: Muthuraj K
2 Replies

8. Shell Programming and Scripting

How to delete particular rows from a file

Hi I have a file having 1000 rows. Now I would like to remove 10 rows from it. Plz give me the script. Eg: input file like 4 1 4500.0 1 5 1 1.0 30 6 1 1.0 4500 7 1 4.0 730 7 2 500000.0 730 8 1 785460.0 45 8 7 94255.0 30 9 1 31800.0 30 9 4 36000.0 30 10 1 15000.0 30... (5 Replies)
Discussion started by: suresh3566
5 Replies

9. Shell Programming and Scripting

awk script to update header record

I am using HP UX and think this may be done with awk but bot sure. I have a file with a several header records and undeneath many detail records I need to put in the header record the number of detail records above this header record and number of detail records below this header record Header... (5 Replies)
Discussion started by: klut
5 Replies
Login or Register to Ask a Question