Append a line "while read line"


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Append a line "while read line"
# 1  
Old 10-04-2016
Question Append a line "while read line"

Hello everyone,

I want to process a data file using bash, I would like add a new line RIGHT after the time when i know "another variable met a value"

Like this:
Code:
while read line
do
 ...
 if [ $xyz == "ON" ]; then
 #Append a new line "===" to input.txt file after $line position
 #break
 fi
done < input.txt

That mean we don't know the position in advance, so I could not use "sed".
Any help please!
Thank you!

Last edited by fongthai; 10-04-2016 at 11:31 PM.. Reason: more info
# 2  
Old 10-05-2016
Code:
$ cat -n input.txt
     1  test
     2  ON
     3  go
     4  hello
     5  hi
     6  IN
     7  ON
-------------------------------------------------
$ cat i.sh
#!/bin/bash
while read line
do
        line_num=$((line_num+1))
        if [ $line = "ON" ]; then
                echo ${line_num}
        fi
done < input.txt
-------------------------------------------------
$ bash i.sh
2
7

# 3  
Old 10-05-2016
Hi itkamaraj,

Where is the line_num coming from?

And you may mis-understand my initial post: the condition is based on another variable $xyz - not the data from file or $line
# 4  
Old 10-05-2016
can you provide the example input and output file and $xyz variable value...etc...etc
# 5  
Old 10-05-2016
input.txt
Quote:
line_before_pin_1
line_before_pin_2
..
PIN
line_after_pin_1
line_after_pin_2
line_after_pin_3
..
line_after_pin_end
To make it easier, let assume xyz=2
So, I want look for the PIN line, then move it next xyz line (meaning: move it to next 2 lines)
The output should be like this:
Code:
line_before_pin_1
line_before_pin_2
..
line_after_pin_1
line_after_pin_2
PIN
line_after_pin_3
..
line_after_pin_end

Note that there are 2 actions:
- remove old PIN line
- add new PIN line to the right position
# 6  
Old 10-05-2016
Quote:
Originally Posted by fongthai
input.txt
To make it easier, let assume xyz=2
So, I want look for the PIN line, then move it next xyz line (meaning: move it to next 2 lines)
The output should be like this:
Code:
line_before_pin_1
line_before_pin_2
..
line_after_pin_1
line_after_pin_2
PIN
line_after_pin_3
..
line_after_pin_end

Note that there are 2 actions:
- remove old PIN line
- add new PIN line to the right position
Hello fongthai,

Could you please try following and let me know if this helps you. Let's say your Input_file is as follows.
Code:
cat  Input_file
line_before_pin_1
line_before_pin_2
PIN
line_after_pin_1
line_after_pin_2
line_after_pin_3
line_after_pin_end

Then following is the code for same.
Code:
awk -vxyz=2 '{if($0 ~ /PIN/){while(++a<=xyz){getline;print $0;};print "PIN";a="";next}} 1'   Input_file

Output will be as follows.
Code:
line_before_pin_1
line_before_pin_2
line_after_pin_1
line_after_pin_2
PIN
line_after_pin_3
line_after_pin_end

Similarly you could change the value of variable in above code -vxyz=2to as per your requirement too.

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 7  
Old 10-05-2016
Thanks,

That works well, but not easy to understand, can you clear my mind Smilie please
Thanks.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Failure: if grep "$Var" "$line" inside while read line loop

Hi everybody, I am new at Unix/Bourne shell scripting and with my youngest experiences, I will not become very old with it :o My code: #!/bin/sh set -e set -u export IFS= optl="Optl" LOCSTORCLI="/opt/lsi/storcli/storcli" ($LOCSTORCLI /c0 /vall show | grep RAID | cut -d " "... (5 Replies)
Discussion started by: Subsonic66
5 Replies

2. Shell Programming and Scripting

Move a line containg "char" above line containing "xchar"

Okay, so I have a rather large text file and will have to process many more and this will save me hours of work. I'm not very good at scripting, so bear with me please. Working on Linux RHEL I've been able to filter and edit and clean up using sed, but I have a problem with moving lines. ... (9 Replies)
Discussion started by: rex007can
9 Replies

3. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

4. Shell Programming and Scripting

append "awk command" to the end of each line

hi; this is my qqq.mos: l ./gcsw 86.0.0.1 'lt all;l+;lset SectorPort=860 Tilt 861;l-' l ./gcsw 86.0.0.2 'lt all;l+;lset SectorPort=862 Tilt 863;l-' l ./gcsw 86.0.0.3 'lt all;l+;lset SectorPort=864 Tilt 865;l-' ... i want to append;l nawk 'NR==14 && $NF!="Set."{print "l ./gcsw "r"... (4 Replies)
Discussion started by: gc_sw
4 Replies

5. Shell Programming and Scripting

SED or AWK "append line to the previous line"

Hi, How can I remove the line beak in the following case if the line begin with the special char “;”? TEXT Text;text ;text Text;text;text I want to convert the text to: Text;text;text Text;text;text I have already tried to use... (31 Replies)
Discussion started by: research3
31 Replies

6. Shell Programming and Scripting

defining a variable using multiple "entries/columns" within a line using read

Hello All, I am trying to figure out how to use the read command. I have a txt file that has rows looking something like this: 1 2 3 4 5 6 7 8 9 where each number represents an entry of various characters deliminated by tabs. My goal is to set entries 2-7 as a variable/string that I... (3 Replies)
Discussion started by: Torinator
3 Replies

7. Shell Programming and Scripting

script to read a line with spaces bet " " and write to a file

Hi, I need a command in UNIX KSH below is the description... MAPPING DESCRIPTION ="Test Mapping for the calid inputs" ISVALID ="YES" NAME ="m_test_xml" OBJECTVERSION ="1" VERSIONNUMBER ="1" unix ksh command to read the DESCRIPTION and write to a file Test Mapping for the calid inputs... (3 Replies)
Discussion started by: perlamohan
3 Replies

8. Shell Programming and Scripting

sed append "\n" to end of every line in file

I know it sounds simple, but I want to e-mail the last 6 lines of a log file, which I have tailed into logresults.txt. I'm using echo -e "Subject:server results\nFrom:server log <user@domain.com>\n"`cat logresults.txt` | sendmail -t user@domain.com which works, but the body of the e-mail has... (4 Replies)
Discussion started by: unclecameron
4 Replies

9. Shell Programming and Scripting

each line as 20digit long append zero "0" in front

i have an ip file like 121 1213412 34345353 long file want to made each line as 20digit long append zero "0" in front as 121 become 00000000000000000121 (1 Reply)
Discussion started by: RahulJoshi
1 Replies

10. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies
Login or Register to Ask a Question