awk and sed can process entire files with millions of lines(and will beat the pants off the shell in comparison when doing so). But like any other external programs they take time to load, run, and quit. awk in particular is an entire programming language probably capable of replacing most of that script with one call.
When the amount of work being done is miniscule, the script will be wasting more time loading and quitting external programs than doing actual work. It's better to use shell builtins to process single lines of text in the shell whenever possible. The read builtin can split on tokens. Many shells have string operations which let you do regex-like replacements inside strings without calling sed. And so forth.
How to do so depends on what your shell is and what your program looks like.
I see. Which bash builitin would be good to use in this case?
would work in bash, except you could probably replace whatever set BARCODE_LINE in the first place, to extract all the tokens in the line in one go, letting you remove that line and perhaps several others too.
And perhaps simplify where that variable comes from, and lines related before it, and on and on. If that habit's there, it's likely to be all over, and large parts of the script could be simplified and reduced. We'd need to see more of the script.
To illustrate further, one would be to use variable expansion in post 1:
which could replace that line, and as Corona688 so eloquently explained, would be far more effective, so the script would run faster.
or with the second example:
--
The example in post #1 contains an error by the way, because there should not be spaces around variable assignments, but they probably are not there in the script itself, or it would not work. And the semicolon is superfluous, and there should be double quotes around the variable expansion after echo, or it will break on directories with spaces and printf would be better to use instead of echo, or it may break with certain escape codes, depending on what echo is being used, and it is better to use $( .. ) instead of backticks )
so
But variable expansion is better.
Last edited by Scrutinizer; 07-05-2012 at 09:17 PM..
I am learning SED and just following the shell scripting book, i have trouble understanding the grep and sed statement,
Question : 1
__________
/opt/oracle/work/antony>cat teledir.txt
jai sharma 25853670
chanchal singhvi 9831545629
anil aggarwal 9830263298
shyam saksena 23217847
lalit... (7 Replies)
Hi,
I am running a script sample.sh in bash environment .In the script i am using sed and awk commands which when executed individually from terminal they are getting executed normally but when i give these sed and awk commands in the script it is giving the below errors :-
./sample.sh: line... (12 Replies)
My need is :
Want to change
docBase="/something/something/something"
to
docBase="/only/this/path/for/all/files"
I have some (about 250 files)xml files.
In FileOne it contains
<Context path="/PPP" displayName="PPP" docBase="/home/me/documents" reloadable="true" crossContext="true">... (1 Reply)
I'm not sure if the problem I'm seeing is an artifact of sed or simply a beginner's mistake. Here's the problem: I want to add a zero-width space following each underscore between XML tags. For example, if I had the following xml:
<MY_BIG_TAG>This_is_a_test</MY_BIG_TAG>
It should look like... (8 Replies)
Hi all,
First off, Thank you all for the knowledge I have gleaned from this site!
Deleting Records from a text file... sed paragraphs
The following code works nearly perfect, however each time it is run on the log file it adds a newline at the head of the file, run it 5 times, it'll have 5... (1 Reply)
i made a script to update a lot of xml files. to save me some time. Ran it and it replaced all the the files with a 0kb file. The problem i was having is that I am using sed to change xml node <doc_root>. The problem with this is it has a / in the closing xml tag and the stuff inside will also have... (4 Replies)
Hello and thx for reading this
I'm using sed to remove only the leading spaces in a file
bash-280R# cat foofile
some text
some text
some text
some text
some text
bash-280R#
bash-280R# sed 's/^ *//' foofile > foofile.use
bash-280R# cat foofile.use
some text
some text
some text... (6 Replies)
Write a sed script to extract the year, rank, and stock for the most recent 10 years available in the file top10_mktval.csv, and output in the following format:
------------------------------
YEAR |RANK| STOCK
------------------------------
2007 | 1 | Exxon... (1 Reply)