1

To paste many files, whose names are incremental numbers:

paste {1..8}| column -s $'\t' -t
  • What if your files wasn't named by number, but only words?
  • It can be up to ten files, what should I do?

In addition, you have a list of files that contains all the files you want.

So far, my approach is:

mkdir paste
j=0; while read i; do let j+=1; cp $i/ paste/$j; done<list;
cd paste; paste {1..8}| column -s $'\t' -t

I have no problem with this approach, I just want to ask if there is any shorter one.


Actually my files have the same name, just on different locations, for instance 1MUI/PQR/A/sum, 2QHK/PQR/A/sum, 2RKF/PQR/A/sum. The paste command should be paste {list}/PQR/A/sum. The list file is:

1MUI
2QHK
2RKF
...

2 Answers 2

2

With bash 4

mapfile -t <list
paste "${MAPFILE[@]}" | column -s $'\t' -t

for the paste {list}/PQR/A/sum version of the question

mapfile -t <list
paste "${MAPFILE[@]/%//PQR/A/sum}" | column -s $'\t' -t    
4
  • I have edited my question, sorry for the inconvenience. Please come back and see. When I use this way, the output is paste: 1MUI: Is a directory (repeat till the end of the list) and only cat one file. Commented Jul 9, 2014 at 19:34
  • @Ooker, see the edit Commented Jul 9, 2014 at 19:48
  • also, can you explain to me what the /%/ means? Commented Jul 9, 2014 at 19:51
  • @Ooker, that is used to add a suffix to every element of the MAPFILE array, for details refer this Commented Jul 9, 2014 at 19:52
0

If all your files is in single directory, just use:

paste * | column -s $'\t' -t

If you have a list file contains all files, and each file name in one line, does not have special characters like space, you can try:

paste $(printf "%s " $(cat list)) | column -s $'\t' -t

Updated

With your updated information, you can try:

paste */PQR/A/sum | column -s $'\t' -t

If your parent directory contains many files and directory that you don't need, you must list all your directory explicitly:

paste {1MUI,2QHK,2RKF,...}/PQR/A/sum | column -s $'\t' -t
3
  • wow, you update your answer before I comment. Thanks a lot. Nevertheless, my folder contains more files and folders which don't relevant to my need, therefore I can't use *. Commented Jul 9, 2014 at 19:31
  • so basically there is no way to shorten my code? Commented Jul 9, 2014 at 19:43
  • How is $(printf "%s " $(cat list)) any better than $(cat list)? (They both fail if filenames containing whitespace are present.) Commented Jul 11, 2014 at 18:43

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.