Is there any way to concatenate multiple text files in numerical order of the file names with one bash command ?
I tried this, but for some reason, the first three l
Adding this answer, only because the currently accepted answer suggests a bad practice. & In future, Hellmar may land in exact same problem I faced once. : Cannot delete an accepted answer.
Anyway, this should be the safe answer:
printf "%s\0" *txt | sort -zn | xargs -0 cat > all.txt
Here, entire pipeline has file names delimited by a NULL character. A NULL character is only character that cannot be part of file name.
Also, if all the filenames have same structure, (say file0001.txt, file0002.txt etc), then this code should work just as good:
cat file[0-9][0-9][0-9][0-9].txt > all.txt
ls *txt | sort -n | xargs cat > all.txt
This gets a list of all the filenames and sorts it, then uses xargs to construct a command line from cat
and the sorted list.
update for anishsane's answer.
printf "%s\0" *txt | sort -k1.thecharlocation -zn | xargs -0 cat > all.txt
thecharlocation
is the first key you want to sort. If your file name is file01.txt
, thecharlocation
is 5
.
See also another similar answer from Nate in this question.