Copy a field into n line in another place


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Copy a field into n line in another place
# 1  
Old 05-07-2012
Copy a field into n line in another place

I have a file contains 100 section (here i show 2 section of that); i want to replace date from 1st & 2nd field of 1st line of each section (1st line of each section is header and the other lines are body) and merg them into one field, then copy it on 7th field of the lines in each section separately ( make a new field with date value ). after this editing, i want to delete whole 1st line (header) and also delete 2nd 4th 8th 9th 10th and 11th field of each section and put "?" instead some of them.[each section separate with ### ]
[in_file]:
Code:
 2006 0101 1236 49.3 L  37.902  48.482  0.0  Teh  5 0.2 2.7LTeh                1
 BST  SN EPn  0   1236 45.64                                     0.0    0.0   0 
 HSH  SZ EPg  0   1237 9.75                                     -0.0    126 238 
 BST  SZ EPn  4   1237 10.80                                    -3.6    143 261
###
 2006 0101 1316 22.9 L  34.933  46.292  2.0  Teh  4 0.3 2.2LTeh                1
  DHR  SZ EPg  0   1316 27.32                                    -0.1   27.0 161 
 DHR  SN ESg  0   1316 30.52                                     0.0   27.0 161 
 LIN  SZ EPg  0   1316 32.78                                    -0.1   61.0  91 
 GHG  SZ EPg  0   1316 34.96                                     0.4   72.0 159

[desired out_file]:
Code:
BST ? ? ? Pn ? 20060101 1236 45.64
HSH ? ? ? Pg ? 20060101 1237 9.75 
BST  ? ? ? Pn ? 20060101 1237 10.80
##
DHR  ? ? ? Pg  ? 20060101  1316 27.32
DHR  ? ? ? Sg  ? 20060101  1316 30.52
LIN    ? ? ? Pg  ? 20060101  1316 32.78 
GHG  ? ? ? Pg  ? 20060101  1316 34.96

# 2  
Old 05-07-2012
here's a quickie that may do what you want... add error checking and adjust the regex to more exactly match your input file... don't know what your data represents so forgive the single-char variable names.

Code:
#!/bin/perl

open(I, "< in_file");
open(O, "> out_file");
$inbody=0;
while(<I>) {
    chomp;
    next if /^\s*$/;
    if (/^###/) {
        $inbody=0;
        print O "$_\n";
        next;
    }
    if ($inbody eq 0) {
        ($yr, $md) = /^\s*(\d+)\s+(\d+)/;
        $inbody=1;
    } else {
        ($a, $b, $c, $d) = /^\s*(\S+)\s*\S+\s+(\S+)\s+\S+\s+(\S+)\s+(\S+)/;
        print O "$a ? ? ? $b ? ${yr}${md} $c $d\n";
    }
}
close(I);
close(O);

This User Gave Thanks to Yeaboem For This Post:
# 3  
Old 05-08-2012
thank you so much, but could you please write an awk, csh or bash script to do that?
# 4  
Old 05-08-2012
Why can't you use perl oreka18?
This User Gave Thanks to Scrutinizer For This Post:
# 5  
Old 05-08-2012
because i don't writing scripts with this function, I'm learning awk.
# 6  
Old 05-08-2012
alright, try:
Code:
awk '!n{dd=$1 $2; n=1; next} {sub($2 FS substr($3,1,1),"? ? ? "); $4="? " dd; NF=8} /^###/{$0=$1; n=0}1' infile


Last edited by Scrutinizer; 05-08-2012 at 05:01 AM..
This User Gave Thanks to Scrutinizer For This Post:
# 7  
Old 05-08-2012
try this Smilie
Code:
# awk '/^ 200?/{x=$1$2;y="? ? ?";next}{sub(/^./,"",$3);if(/^##/)print "##";else print $1,y,$3,"?",x,$5,$6}' yourfile
BST ? ? ? Pn ? 20060101 1236 45.64
HSH ? ? ? Pg ? 20060101 1237 9.75
BST ? ? ? Pn ? 20060101 1237 10.80
##
DHR ? ? ? Pg ? 20060101 1316 27.32
DHR ? ? ? Sg ? 20060101 1316 30.52
LIN ? ? ? Pg ? 20060101 1316 32.78
GHG ? ? ? Pg ? 20060101 1316 34.96

This User Gave Thanks to ygemici For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Command/script to match a field and print the next field of each line in a file.

Hello, I have a text file in the below format: Source Destination State Lag Status CQA02W2K12pl:D:\CAQA ... (10 Replies)
Discussion started by: pocodot
10 Replies

2. Red Hat

Remove new line for a particular place

Hello All, I have a text file which gets uploaded to tables using shells script. However before running that script I need to alter it, like in the below I have to firstly find the word 1234 and remove the new line from end of it. 1234,5678,fasfasasfsadf abc changes to... (11 Replies)
Discussion started by: Sandeep_sandy
11 Replies

3. Shell Programming and Scripting

Add line in exact place

I have one big XML file which contains information about 100 jobs,"JOB JOBISN=" indicates that is a job so where ever tag starts with "JOB JOBISN=" then i need to add below highlighted line between "<INCOND NAME" and "<OUTCOND NAME" for all jobs.like this i want to add below highlighted line for... (7 Replies)
Discussion started by: katakamvivek
7 Replies

4. Shell Programming and Scripting

awk to place value at 24 field in a flat file issue

I am trying to add 0393 value at 24th feild using the below command, but its adding at all the lines including header and trailer Input file: ZHV|2657|D0217001|T|TXU|Z|PAN|20131112000552||||OPER| 754|52479| 492|489|SP40|1014570286334|20131111|20131201|14355334|CHAMELON... (1 Reply)
Discussion started by: Aditya_001
1 Replies

5. Shell Programming and Scripting

How to update field value in place?

Dear all: I have a file: 1:00 2:abc 3:12asweand I ran the following awk script on this file: #!/usr/bin/awk -f { i= 1; while(i<=NF) { $i=substr($i, 1, index($i, ":")-1); i++ } }I am expecting the file would become (after running... (7 Replies)
Discussion started by: littlewenwen
7 Replies

6. Shell Programming and Scripting

Compare Field in Current Line with Field in Previous

Hi Guys I have the following file Essentially, I am trying to find the right awk/sed syntax in order to produce the following 3 distinct files from the file above: Basically, I want to print the lines of the file as long as the second field of the current line is equal to the... (9 Replies)
Discussion started by: moutaye
9 Replies

7. UNIX for Dummies Questions & Answers

using gsed with cp to sort files in directory - every N file copy to new place

Hi all, I'm having a problem with some basic piping issues... I have been able to get in a directory and ls | gsed in order to list every N file for instance: ls | gsed -n '2~5p' The thing is I want to be able to copy the output files to a new directory. Basically directory /all has a... (4 Replies)
Discussion started by: dgoss
4 Replies

8. UNIX for Dummies Questions & Answers

Copy dir/file from one place to another.

Hello all. I'm not getting the hang of Paths. I have a dir w/files that I want to copy to another dir. Right now I am in the "source" directory. I want to copy it to Ch7. "cp -r source Ch7". Ch7 was already created. 1st msg.: cannot stat `source`: No such file or dir. I typed pwd & got... (3 Replies)
Discussion started by: Ccccc
3 Replies

9. Solaris

What is the best way to copy data from place to another place?

Dear Gurus, I need you to advice or suggestion about the best solution to copy data around 200-300G from serverA(location A) to serverB(location B). Normally, I will share folder and then copy but it takes too long time(about 2 days). Do you have any suggestion or which way should be... (9 Replies)
Discussion started by: unitipon
9 Replies

10. Shell Programming and Scripting

Getting the value of a line, that changes place

Hi I am trying to get the value of several results in a file called seq032.diag. The values I am looking for is down under Smooth Tracking nodes and is for g01r01 g02r01 s01t02 etc etc. The problem is that when I try to use look for text and tail etc, it works fine in one result file. In... (1 Reply)
Discussion started by: Navigatorchief
1 Replies
Login or Register to Ask a Question