Merge all the files in a folder in FIFO order


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Merge all the files in a folder in FIFO order
# 1  
Old 06-13-2012
Merge all the files in a folder in FIFO order

Hi All,

I have to merge the data in all the files in a folder such that the data of the earliest file come first then the second file's data and so on. Please help.

Thanks.
# 2  
Old 06-13-2012
Under ksh or bash (sort by date)
Code:
for f in $(ls -tr); do cat "$f" >> /tmp/my_accumulated_data_file; done

if sort by file name just drop -tr from ls

Last edited by migurus; 06-13-2012 at 06:48 PM.. Reason: forgot sort
# 3  
Old 06-13-2012
You can use ls with suitable options to generate a list of the directories contents in the proper order. That list can be piped into a while-loop for reading. Use test/[ to verify that the item is indeed a file before cat'ing. Redirect the output of the while-loop to a file of your choice.

Regards,
Alister
# 4  
Old 06-13-2012
Usually it's a very bad thing to use ls instead of find for task like this, but... being really careful, try to see:

Code:
cd mydirectory
ls -1rt | while read item; do [[ -f $item ]] && cat $item >> /somewhereelse/outputfile ; done

# 5  
Old 06-13-2012
Quote:
Originally Posted by migurus
Code:
for f in $(ls -tr); ...

That's an unsafe and unreliable way to work with a list of filenames.

Code:
$ mkdir test && cd test
$ touch -- '?' '[a]' a '-n'
$ ls -1
?
a
[a]
-n
$ ls | while IFS= read -r f; do printf '%s\n' "$f"
?
a
[a]
-n
$ for f in $(ls); do echo "$f"; done
?
a
a
a

That for-loop is badly broken. Instead of the four files, only two are printed, one of them three times. Pathname expansion (globbing) after the command substitution replaces ? with ? a and [a] with a, leading to the three instances of a. The -n is treated is silently consumed by echo as an option.

Beware pathname expansion after command substitution. Beware feeding echo arbitrary arguments. printf is safer and portable (and, like echo, usually a shell builtin).

Regards,
Alister

---------- Post updated at 06:14 PM ---------- Previous update was at 06:10 PM ----------

Quote:
Originally Posted by Lem
Usually it's a very bad thing to use ls instead of find for task like this, but... being really careful, try to see:

Code:
cd mydirectory
ls -1rt | while read item; do [[ -f $item ]] && cat $item >> /somewhereelse/outputfile ; done

If done correctly, there's absolutely nothing wrong or unsafe about piping ls into a while-read loop. The only text it cannot handle is a newline in a pathname because ls and read use it as their delimiter.

Your example, however, isn't well-constructed. You must use IFS= to prevent trimming of leading/trailing whitespace and -r to treat backslashes literally. To read arbitrary lines of text verbatim: IFS= read -r line

Regards,
Alister

Last edited by alister; 06-13-2012 at 07:36 PM..
These 2 Users Gave Thanks to alister For This Post:
# 6  
Old 06-13-2012
Thanks all for reply..I need to append the timestamp of the file at the end of each record as well...I am new to UNIX,so please provide the code.Thanks for the help..
# 7  
Old 06-14-2012
Quote:
Originally Posted by alister
Your example, however, isn't well-constructed.
I knew. When I wrote "be very careful", I meant: I know that a lot of things can go wrong... but at the moment I couldn't say precisely what they are.

I'm just a shell newbie, and bash is only my latest hobby. So please take it into account when I write some nonsense. I'm sorry in advance. Smilie

Quote:
You must use IFS= to prevent trimming of leading/trailing whitespace and -r to treat backslashes literally. To read arbitrary lines of text verbatim: IFS= read -r line
Ok, it's easy to remember. "IFS= ", and read will catch the whole line 100% of times. Thanks. Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Request for Shell script to move files from Subfolder to Parent folder and delete sub folder

Hi Team, I am new to shell script and there is a requirement where files should be moved from Subfolder to parent folder. Eg: parent folder --> /Interface/data/test/IN Sub folder -->/Interface/data/test/IN/Invoice20180607233338 Subfolder will be always with timestamp... (6 Replies)
Discussion started by: srivarun15
6 Replies

2. Shell Programming and Scripting

Shell scripting for moving folder specific files into target directory of that country folder.

I need help to write shell script to copy files from one server to another server. Source Directory UAE(inside i have another folder Misc with files inside UAE folder).I have to copy this to another server UAE folder( Files should be copied to UAE folder and Misc files should be copied in target... (3 Replies)
Discussion started by: naresh2389
3 Replies

3. Shell Programming and Scripting

Read input files and merge them in given order and write them to input one param or one file

Dear Friends, I am looking for a shell script to merge input files into one file .. here is my idea: 1st paramter would be outfile file (all input files content) read all input files and merge them to input param 1 ex: if I pass 6 file names to the script then 1st file name as output file... (4 Replies)
Discussion started by: hyd1234
4 Replies

4. UNIX for Dummies Questions & Answers

Folder Merge

Hi, I had a folder ABC . Was trying to move it . But the command was randomly stopped by mistake. Now , I have folder ABC in 2 location with different half data at each path . How do I merge both the folders and sub folders into a single one ? Any help is appreciated. (2 Replies)
Discussion started by: Abhayman
2 Replies

5. UNIX for Dummies Questions & Answers

Merge all csv files in one folder considering only 1 header row and ignoring header of all others

Friends, I need help with the following in UNIX. Merge all csv files in one folder considering only 1 header row and ignoring header of all other files. FYI - All files are in same format and contains same headers. Thank you (4 Replies)
Discussion started by: Shiny_Roy
4 Replies

6. Shell Programming and Scripting

check how many files in folder or total files in folder

Hi all, I have copied all my files to one folder.and i want to check how many files (count) in the folder recently moved or total files in my folder? please send me the query asap. (3 Replies)
Discussion started by: durgaprasad
3 Replies

7. Solaris

Program execution order like FIFO queue

Hi all: I have a problem with a C++ service runing on solaris 10. This service only set a signal on oracle table. When the service detect a cut off on the line (tcp/ip), trigger a cobol program for set the signal OFF. When the line is on again, the service trigger the same cobol program for set... (0 Replies)
Discussion started by: hcastellani
0 Replies

8. UNIX for Advanced & Expert Users

merge two files in ascending order

Hello Friends, I want to merge two files in ascending order on the first field. And if the first field matches sort on 3rd field i.e, TXADDR should come ahead of RXADDR . file1 9 : TXADDR : 00000000 65 : TXDATA 0000000000000011 83 : TXDATA 0000000000000012 453 :... (10 Replies)
Discussion started by: user_prady
10 Replies

9. UNIX for Advanced & Expert Users

Auto copy for files from folder to folder upon instant writing

Hello all, I'm trying to accomplish that if a file gets written to folder /path/to/a/ it gets automatically copied into /path/to/b/ the moment its get written. I thought of writing a shell script and cron it that every X amount of minutes it copies these files over but this will not help me... (2 Replies)
Discussion started by: Bashar
2 Replies

10. UNIX for Dummies Questions & Answers

need to find fifo files

I need to be able to recursively find fifo files in a users home directory. What is the best way to do that. (3 Replies)
Discussion started by: frankkahle
3 Replies
Login or Register to Ask a Question