Im attempting to insert the contents of File1 at a specific point of File2.
File1
AD004 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
File2
AA001 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AB002 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AC003 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
Result
AA001 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AB002 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AC003 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AD004 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
I used the following command but its not working -
sed "N;/AC003\n{$/r file1" file2
What am I missing?
perl -0ne '$x=$_ if $.==1;$y=$_ if $.==2;$y=~s/AC003.*\n/$&$x/;print $y' file1 file2
AWK:
awk '/AC003/{print;while ((getline x < "file1") > 0) print x;next}1' file2
Thanks for the quick response.
Both those work for inserting above the declared line, but it leaves in 1 of the 125+ lines at the top. For example -
Result
AA001 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AB002 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AC003 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AZ027 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AD004 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AE005 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AF006 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
BZ001 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
CZ002 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
Should be
AA001 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AB002 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AC003 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AD004 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AE005 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AF006 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AZ027 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
BZ001 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
CZ002 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
Try:
sed '/AC003/rFile1' File2
That does not work. File1 is inserted after each
AA001 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
So it looks like
AA001 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
File 1
AA002 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
File 1
AA003 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
File 1
Any other suggestions?
awk '/AC003/ {print;while (getline<"file1">0) print;next} {print}' file2
Just sort the 2 files and put the result into an output file...
sort -k1,1n file1 file2 > outfile
What OS and version are you using?
I get:
$ sed '/AC003/rfile1' file2
AA001 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AB002 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AC003 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
AD004 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1
Again this works, but like the others it leaves in the first line of the set its looking for.
File 1
AU1150002001 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
AU1150002002 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
AU1150002003 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
AC0030002001 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
AC0030002002 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
AC0030002003 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
File 2
ER12100021001 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
ER12100021002 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
ER12100021003 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
Output
AU1150002001 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
AU1150002002 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
AU1150002003 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
AC0030002001 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
ER1210001001 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
ER1210001002 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
ER1210001003 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
AC0030002002 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
AC0030002003 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
With your latest example:
$ sed '/AC003/rfile2' file1
AU1150002001 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
AU1150002002 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
AU1150002003 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
AC0030002001 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
ER12100021001 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
ER12100021002 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
ER12100021003 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
AC0030002002 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
ER12100021001 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
ER12100021002 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
ER12100021003 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
AC0030002003 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
ER12100021001 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
ER12100021002 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
ER12100021003 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9 -99.9
Try a space between r and "file1":
sed '/AC003/r file1' file2
1 Like
OK - you want it after each appearance of AC003?
awk '/AC003/ {print;while (getline<"file2">0) print; close("file2");next} {print}' file1
Scrutinizers genious line works also at my Solaris 8 WITH space
sed '/AC003/r file2' file1
Thanks Scrutinizer;)
1 Like
awk '/AC003/ {print;while (getline<"file2">0) print; close("file2");next} {print}' file1
This works perfect - thanks!