If you want to insert a line at the top (or anywhere) of a file within a shell script, use the ed editor.
Code:
string="hello"
ed << \EOF
e any_file
1i
${string}
That code is broken in multiple ways.
First, since the first letter of the heredoc delimiter, EOF, is quoted with a backslash, there will be no substitutions made by the shell within the heredoc. This means that "${string}" will appear literally instead of "hello".
Second, the heredoc delimiter, "EOF", which marks the end of the data is missing.
Third, you need to add a write command, w, to save the changes.
Fourth, before you can use the write command, the text that's inserted needs to be terminated with a lone dot on a line.
It's not all bad news, though. The edit, e, command can be used to load a file into the buffer without invoking ed once per file. If there are a very large number of files, the efficiency of my approach could be improved by only calling ed once and using the for loop to pipe commands into it.
Code:
for f in *; do
l=$(wc -l < "$f")
[ $l -lt 400 ] && continue
printf 'e %s\n0a\nthere are 400 lines in this file and %d bonus lines\n.\nw\n' "$f" $((l-400))
done | ed -s
While the printf could be made more readable with a "%s\n" format string, the clarity of the original heredoc is unmatched by either of
Code:
printf '%s\n' "e $f" 0a "there are 400 lines in this file and $((l-400)) bonus lines" . w
or
Code:
printf '%s\n' \
"e $f" \
0a \
"there are 400 lines in this file and $((l-400)) bonus lines" \
. \
w
Dear All,
I would like to compare two files and return the number of matches found.
Example
File A
Lx2
L1_Mus1
L1Md_T
Lx5
L1M2
L1_Mus3
Lx3_Mus
Lx9
Lx2A
L1Md_A
L1Md_F2
File B
L1_Mus3
L1_Mus3 (3 Replies)
Hi,
I have multiple files having many lines like as bvelow:
file Name a.txt
abc def
def xyz
123 5678
file Name b.txt
abc def
def xyz
123 5678
I would like to append files in the below format to a new file:
file Name c.txt (7 Replies)
Hi!
I just want to count number of files in a directory, and write to new text file, with number of files and their name
output should look like this,,
assume that below one is a new file created by script
Number of files in directory = 25
1. a.txt
2. abc.txt
3. asd.dat... (20 Replies)
Hi Everybody
I want to write a script to count the number of lines in a file that don't ahve any thing on it, the free lines, i try to do it with fgrep "" which means to grep on the spaces but it does not work.
help me please? (3 Replies)
Hi, I need some help with a script I'm trying to write. I have a log file containing references to a number of different webservices. I wish to write a script that will list the webservices with a count as to how many times they appear in the log.
An example of the log file content:
... (2 Replies)
how to count the total number of lines of all the files under a directory using perl script..
I mean if I have 10 files under a directory then I want to count the total number of lines of all the 10 files contain. Please help me in writing a perl script on this. (5 Replies)
Hello all,
I always found help for my problems using the search option, but this time my request is too specific. I have two files that I want to compare. File1 is the index and File2 contains the data:
File1:
chr1 protein_coding exon 500 600 . + . gene_id "20532";... (0 Replies)
Hello, I'm trying to create a BASH file that can read all the files in my working directory and tell me how many words and lines are in that file. I wrote the following code:
FILES="*"
for f in "$FILES"
do
echo -e `wc -l -w $f`
done
My issue is that my file is outputting in one... (4 Replies)
Dear Members,
I want to count the number of lines in a file; for that i am using the following command :
FILE_LINE_COUNT=`wc -l $INT_IN/$RAW_FILE_NAME`
if i do an echo on FILE_LINE_COUNT then i get
241 /home/data/testfile.txt
I don't want the directory path to be displayed. Variable... (1 Reply)