LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   adding line (https://www.linuxquestions.org/questions/programming-9/adding-line-4175487799/)

sam@ 12-12-2013 11:31 PM

adding line
 
Query related to adding a particular line in my file.

My original file looks like this

sorce1 LEN assumption 695 3570 0.770047 - . ID=f000001.1;source_id=A.off_LEN_10008424;
sorce1 LEN descriptive 3334 3570 . - 0 Parent=f000001.1;
sorce1 LEN extra 913 993 . - 0 Parent=f000001.1;
sorce1 LEN descriptive 695 736 . - 0 Parent=f000001.1;

sorce1 LEN assumption 8859 11328 0.628724 + . ID=f000002.1;source_id=A.off_LEN_10008425;
sorce1 LEN descrptive 8859 9032 . + 0 Parent=f000002.1;

sorce1 LEN assumption 24331 34483 1 - . ID=f000003.1;source_id=A.off_LEN_10008426;part_support_id=CUFF1.1.1;
sorce1 LEN extra 34479 34483 . - 0 Parent=f000003.1;


For every line which has assumption in 3rd column, I have to add a line which has an entry"predictive " in 3rd column.

It can be seen in bolded line

The added line needs to have the 3rd column entry as predictive.

An example:

result file should look like this
sorce1 LEN predictive 695 3570 0.770047 - . ID=f000001;source_id=A.off_LEN_10008424;
sorce1 LEN assumption 695 3570 0.770047 - . ID=f000001.1;source_id=A.off_LEN_10008424;
sorce1 LEN descriptive 3334 3570 . - 0 Parent=f000001.1;
sorce1 LEN extra 913 993 . - 0 Parent=f000001.1;
sorce1 LEN descriptive 695 736 . - 0 Parent=f000001.1;

sorce1 LEN predictive 8859 11328 0.628724 + . ID=f000002;source_id=A.off_LEN_10008425;

sorce1 LEN assumption 8859 11328 0.628724 + . ID=f000002.1;source_id=A.off_LEN_10008425;
sorce1 LEN descrptive 8859 9032 . + 0 Parent=f000002.1;

[B]sorce1 LEN predictive 24331 34483 1 - . ID=f000003;source_id=A.off_LEN_10008426;part_support_id=CUFF1.1.1;
sorce1 LEN assumption 24331 34483 1 - . ID=f000003.1;source_id=A.off_LEN_10008426;part_support_id=CUFF1.1.1;
sorce1 LEN extra 34479 34483 . - 0 Parent=f000003.1;

Please do help on what I could do to add a line for every statement which has assumption in 3rd column

Thanks

danielbmartin 12-13-2013 12:54 PM

With this InFile ...
Code:


sorce1 LEN assumption 695 3570 0.770047 - . ID=f000001.1;
sorce1 LEN descriptive 3334 3570 . - 0 Parent=f000001.1;
sorce1 LEN extra 913 993 . - 0 Parent=f000001.1;
sorce1 LEN descriptive 695 736 . - 0 Parent=f000001.1;

sorce1 LEN assumption 8859 11328 0.628724 + . ID=f000002.1;
sorce1 LEN descrptive 8859 9032 . + 0 Parent=f000002.1;

sorce1 LEN assumption 24331 34483 1 - . ID=f000003.1;
sorce1 LEN extra 34479 34483 . - 0 Parent=f000003.1;

... this awk ...
Code:

awk '{save=$0;
      if ($3=="assumption") {$3="predictive"; print};
      print save}' $InFile >$OutFile

... produced this OutFile ...
Code:


sorce1 LEN predictive 695 3570 0.770047 - . ID=f000001.1;
sorce1 LEN assumption 695 3570 0.770047 - . ID=f000001.1;
sorce1 LEN descriptive 3334 3570 . - 0 Parent=f000001.1;
sorce1 LEN extra 913 993 . - 0 Parent=f000001.1;
sorce1 LEN descriptive 695 736 . - 0 Parent=f000001.1;

sorce1 LEN predictive 8859 11328 0.628724 + . ID=f000002.1;
sorce1 LEN assumption 8859 11328 0.628724 + . ID=f000002.1;
sorce1 LEN descrptive 8859 9032 . + 0 Parent=f000002.1;

sorce1 LEN predictive 24331 34483 1 - . ID=f000003.1;
sorce1 LEN assumption 24331 34483 1 - . ID=f000003.1;
sorce1 LEN extra 34479 34483 . - 0 Parent=f000003.1;

Daniel B. Martin

druuna 12-13-2013 02:10 PM

Looking at the data provided I wonder if specifically looking at column 3 is needed.

Here's a sed solution based on that:
Code:

sed -r '/assumption/{ h ; s/assumption/predictive/ ; G }' infile
Example run:
Code:

$ sed '/assumption/{ h ; s/assumption/predictive/ ; G }' infile
sorce1 LEN predictive 695 3570 0.770047 - . ID=f000001.1;source_id=A.off_LEN_10008424;
sorce1 LEN assumption 695 3570 0.770047 - . ID=f000001.1;source_id=A.off_LEN_10008424;
sorce1 LEN descriptive 3334 3570 . - 0 Parent=f000001.1;
sorce1 LEN extra 913 993 . - 0 Parent=f000001.1;
sorce1 LEN descriptive 695 736 . - 0 Parent=f000001.1;

sorce1 LEN predictive 8859 11328 0.628724 + . ID=f000002.1;source_id=A.off_LEN_10008425;
sorce1 LEN assumption 8859 11328 0.628724 + . ID=f000002.1;source_id=A.off_LEN_10008425;
sorce1 LEN descrptive 8859 9032 . + 0 Parent=f000002.1;

sorce1 LEN predictive 24331 34483 1 - . ID=f000003.1;source_id=A.off_LEN_10008426;part_support_id=CUFF1.1.1;
sorce1 LEN assumption 24331 34483 1 - . ID=f000003.1;source_id=A.off_LEN_10008426;part_support_id=CUFF1.1.1;
sorce1 LEN extra 34479 34483 . - 0 Parent=f000003.1;


sam@ 12-13-2013 11:31 PM

Thanks for your valuable suggestion.
This definitely changes the 3rd columns but is there a way I could modify the id values as well

sorce1 LEN predictive 695 3570 0.770047 - . ID=f000001;source_id=A.off_LEN_10008424;
sorce1 LEN assumption 695 3570 0.770047 - . ID=f000001.1;source_id=A.off_LEN_10008424;
sorce1 LEN descriptive 3334 3570 . - 0 Parent=f000001.1;
sorce1 LEN extra 913 993 . - 0 Parent=f000001.1;
sorce1 LEN descriptive 695 736 . - 0 Parent=f000001.1;

sorce1 LEN predictive 8859 11328 0.628724 + . ID=f000002;source_id=A.off_LEN_10008425;
sorce1 LEN assumption 8859 11328 0.628724 + . ID=f000002.1;source_id=A.off_LEN_10008425;

druuna 12-14-2013 02:19 AM

@sam@: Try this:
Code:

sed -r '/assumption/{ h ; s/assumption/predictive/ ; s/ID=(.*[0-9])\.[0-9];s/ID=\1;s/; G }' infile
Example:
Code:

$ sed -r '/assumption/{ h ; s/assumption/predictive/ ; s/ID=(.*[0-9])\.[0-9];s/ID=\1;s/; G }' infile
sorce1 LEN predictive 695 3570 0.770047 - . ID=f000001;source_id=A.off_LEN_10008424;
sorce1 LEN assumption 695 3570 0.770047 - . ID=f000001.1;source_id=A.off_LEN_10008424;
sorce1 LEN descriptive 3334 3570 . - 0 Parent=f000001.1;
sorce1 LEN extra 913 993 . - 0 Parent=f000001.1;
sorce1 LEN descriptive 695 736 . - 0 Parent=f000001.1;

sorce1 LEN predictive 8859 11328 0.628724 + . ID=f000002;source_id=A.off_LEN_10008425;
sorce1 LEN assumption 8859 11328 0.628724 + . ID=f000002.1;source_id=A.off_LEN_10008425;
sorce1 LEN descrptive 8859 9032 . + 0 Parent=f000002.1;

sorce1 LEN predictive 24331 34483 1 - . ID=f000003;source_id=A.off_LEN_10008426;part_support_id=CUFF1.1.1;
sorce1 LEN assumption 24331 34483 1 - . ID=f000003.1;source_id=A.off_LEN_10008426;part_support_id=CUFF1.1.1;
sorce1 LEN extra 34479 34483 . - 0 Parent=f000003.1;


danielbmartin 12-14-2013 01:09 PM

Quote:

Originally Posted by sam@ (Post 5080456)
... is there a way I could modify the id values as well ...

With this InFile ...
Code:

sorce1 LEN assumption 695 3570 0.770047 - . ID=f000001.1;abc
sorce1 LEN descriptive 3334 3570 . - 0 Parent=f000001.1;def
sorce1 LEN extra 913 993 . - 0 Parent=f000001.1;ghi
sorce1 LEN descriptive 695 736 . - 0 Parent=f000001.1;jkl

sorce1 LEN assumption 8859 11328 0.628724 + . ID=f000002.1;mno
sorce1 LEN descrptive 8859 9032 . + 0 Parent=f000002.1;pqr

sorce1 LEN assumption 24331 34483 1 - . ID=f000003.1;stu
sorce1 LEN extra 34479 34483 . - 0 Parent=f000003.1;vwx

... this awk ...
Code:

awk '{save=$0;
    if ($3=="assumption")
      {$3="predictive";
        $9=substr($9,1,index($9,".")-1)  \
          substr($9,  index($9,".")+2);
    print};
    print save}' $InFile >$OutFile

... produced this OutFile ...
Code:

sorce1 LEN predictive 695 3570 0.770047 - . ID=f000001;abc
sorce1 LEN assumption 695 3570 0.770047 - . ID=f000001.1;abc
sorce1 LEN descriptive 3334 3570 . - 0 Parent=f000001.1;def
sorce1 LEN extra 913 993 . - 0 Parent=f000001.1;ghi
sorce1 LEN descriptive 695 736 . - 0 Parent=f000001.1;jkl

sorce1 LEN predictive 8859 11328 0.628724 + . ID=f000002;mno
sorce1 LEN assumption 8859 11328 0.628724 + . ID=f000002.1;mno
sorce1 LEN descrptive 8859 9032 . + 0 Parent=f000002.1;pqr

sorce1 LEN predictive 24331 34483 1 - . ID=f000003;stu
sorce1 LEN assumption 24331 34483 1 - . ID=f000003.1;stu
sorce1 LEN extra 34479 34483 . - 0 Parent=f000003.1;vwx

This solution assumes the ID= field will always be the 9th blank-delimited word.

Daniel B. Martin


All times are GMT -5. The time now is 04:29 PM.