I have files from 1 to n, which look like the following:
sim.o500.1 sim.o500.2 . . . sim.o500.n
Each file contains only one line. Now I want to concatenate them in the order from 1 to n.
I tried cat sim.o500.* > out.dat. Sadly this does not work if e.g. n is larger than 9, because this concatenates then sim.o500.1 followed by sim.o500.10and not sim.o500.1 followed by sim.o500.2.
How can I loop through the file names using the numeric order?
Advertisement
Answer
Since * expands in a non-numeric-sorted way, you’d better create the sequence yourself with seq: this way, 10 will coome after 9, etc.
for id in $(seq $n) do cat sim.o500.$id >> out.dat done
Note I use seq so that you are able to use a variable to indicate the length of the sequence. If this value happens to be fixed and known beforehand, you can directly use range expansion writing the n value like: for id in {1..23}.