Append to end of line to specific lines
I am writing a shell script and need some help.
This script will take a开发者_开发知识库 file name as input and will modify that input file according to some logic.
Now, this file will be modified only specific lines, I will get to know the line number though.
So after getting to know the line number, how do I append some text to end of that line?
The text to be appended will keep changing for each line.
Example : The input files contain a list of file names.
Input file is abc.txt, with content:
a.c;
b.c;
c.c;
d.c;
This abc.txt is input to the script, the script should pick up the file names from abc.txt and check where the files are present in a specified directory.
I have another script which gives the name of the directory if the file is there in that location.
If the output of other script is some folder name then it should modify the input file.
For example, if a.c and c.c files are present in dirctory 'somefolder1' and 'somefolder2' (respectively), then expected output is:
a.c;somefolder1;
b.c;
c.c;somefolder2;
d.c;
This is the logic I am using:
MAX_LINES=`wc -l ${CHECKOUT_FILE}.tmp |awk '{print $1}'`
COUNTER=0
#Logic
while [ $COUNTER -ne $MAX_LINES ]
do
COUNTER=`expr $COUNTER + 1`
LINE_READ=`sed -n ${COUNTER}p ${CHECKOUT_FILE}.tmp`
PROGRAM_NAME=`echo $LINE_READ | cut -f 1 -d ";" `
FOLDER_NAME=`${CLEARCASE}/somescript.sh ${PROGRAM_NAME} ${CHECKOUT_COUNTRY}`
if [ $FOLDER_NAME = 'NOTFOUND' ] ; then
echo $FOLDER_NAME
continue
else
sed -e '${COUNTER}s/$/${FOLDER_NAME};/' < ${CHECKOUT_FILE}.tmp > temp.txt
fi
done
I don't know how to do it in sh, but I've done a little Python script:
#!/usr/bin/env python
import sys
mapping = {
2: 'second',
4: 'fourth',
}
def main(src, dst):
with open(src, 'r') as f:
lines = f.readlines()
new_lines = process(lines)
with open(dst, 'w') as f:
f.write(''.join(new_lines))
def process(lines):
for l, s in mapping.items():
lines[l+1] = '%s %s\n' % (lines[l+1].rstrip('\n'), s)
return lines
if __name__ == '__main__':
main(sys.argv[1], sys.argv[2])
It's easy to use: first you define the mapping on top of the script, where you have a
line_number: 'text to append'
pairs. Then save the script as append.py and run it as
python append.py src dst
where src
is the filename you want to process, dst
is the filename to save.
Try this:
$ linenum=4
$ sed -e "${linenum}s/\$/text to add/" < input.txt > output.txt
you can include this inside a loop like
awk '{if(NR==<your line number>)print $0,<your additional text>;else print}' your_file >>temp_file
rm your_file
mv temp_file your_file
NR stands for line number in awk.so we are checking for NR == lets say line 3.
if NR is 3 the
print $0,"your text"
$0 is complete line which will be appended by "your text"
if not line 3 the else{print}-this will print the complete line.
Or a more easy form in sed :
pearl[ncm_o11.2_int.@].525> cat file1
a
b
c
d
e
f
pearl[ncm_o11.2_int.@].526> sed '1s/$/vijay/g' file1
avijay
b
c
d
e
f
This sed command will append to the end of the line the desired text.
'<line_number>s/search/replace'
' 1 s/ $ / vijay '
here is the awk solution:
pearl[ncm_o11.2_int.@].534> awk '{if(NR==1)print $0,"vijay";else print}' file1
a vijay
b
c
d
e
f
精彩评论