Home > Net >  how to add beginning of file to another file using loop
how to add beginning of file to another file using loop

Time:11-30

I have files 1.txt, 2.txt, 3.txt and 1-bis.txt, 2-bis.txt, 3-bis.txt

cat 1.txt
#ok
#5 
6 
5

cat 2.txt
#not ok
#56
13
56

cat 3.txt
#nothing
#

cat 1-bis.txt
5
4

cat 2-bis.txt
32
24

cat 3-bis.txt

I would like to add lines starting with # (from non bis files) at the beginning of files "bis" in order to get:

cat 1-bis.txt
#ok
#5
5
4

cat 2-bis.txt
#not ok
#56
32
24

cat 3-bis.txt
#nothing
#

I was thinking to use grep -P "#" to select lines with # (or maybe sed -n) but I don't know how to loop files to solve this problem

Thank you very much for your help

CodePudding user response:

You can use this solution:

for f in *-bis.txt; do
  { grep '^#' "${f//-bis}"; cat "$f"; } > "$f.tmp" && mv "$f.tmp" "$f"
done

If you only want # lines at the beginning of the files only then use:

Change

grep '^#' "${f//-bis}"

with:

awk '!/^#/{exit}1' "${f//-bis}"

CodePudding user response:

You can loop over the ?.txt files and use parameter expansion to derive the corresponding bis- filename:

for file in ?.txt ; do
    bis=${file%.txt}-bis.txt
    grep '^#' "$file" > tmp
    cat "$bis" >> tmp
    mv tmp "$bis"
done

You don't need grep -P, simple grep is enough. Just add ^ to only match the octothorpes at the beginning of a line.

  • Related