If, for whatever reasons, you need to combine a lot of files of space-separated values into one big file, I'm using this script which I call cf2.
(2 stands for version. cf1 was kinda crap :D )
#!/bin/bash
# cf2: Combine Files :)
if [ $# -eq 1 ]; then
 exec 7<$1
 let eof=0
 while [ $eof -eq 0 ]
 do
 if read line1;  then
  if read line2 <&7; then
   echo -e -n "$line2\t$line1\n"
  else
   let eof=1
  fi
 else
  let eof=1
 fi
 done
 exec 7>&-
elif [ $# -eq 2 ]; then
 exec 7<$1
 exec 8<$2
 let eof=0
 while [ $eof -eq 0 ]
 do
 if read line1 <&7; then
  if read line2 <&8; then
   echo -e -n "$line1\t$line2\n"
  else
   let eof=1
  fi
 else
  let eof=1
 fi
 done
 exec 7>&-
 exec 8>&-
else 
 SELF=$0
 FIRST=$1
 shift
 $SELF $@ | $SELF $FIRST 
fi
How to use it:
# cf2 datafile1.dat datafile2.dat [...] datafileX.dat > newCombinedFile.dat
So if your data files are something like this:
# file1.dat
1 2 3 4
1 2 3 4 
1 2 3 4
# file2. dat
5 6 7 8 
5 6 7 8
5 6 7 8
Running cf2 file1.dat file2.dat will give you:
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
I hope somebody will find this helpful. It has certainly sped up data manipulation for me.
2 σχόλια:
Don't mean to be a "smart-ass", but have you tried the "paste" command?
$ paste data1 data2 data3
I think it does what you ask.
I didn't even know this existed.
Damn.
:D
Δημοσίευση σχολίου