Sponsored Content
Full Discussion: File name with yyyymmddhhmi
Top Forums UNIX for Beginners Questions & Answers File name with yyyymmddhhmi Post 303019989 by rbatte1 on Wednesday 11th of July 2018 01:30:25 PM
Old 07-11-2018
You also need to ensure that your file creation and all the output being put into it is Atomic, i.e. a single operation that takes a single IO. Often this is done by creating the file and building it up with content as another name and then when it is ready, renaming it to it appears as a complete file instantly.

If you have a file that takes even a whole second to build, then you may sometimes be unlucky and fetch a partial file.

Something like this would illustrate it:-
Code:
((random_delay=$RANDOM%9))

( sleep $random_delay ; cat /tmp/myfile ) &      # Display the file at some undetermined time

date                             > /tmp/myfile
echo "First data line of file"  >> /tmp/myfile
sleep 3
echo "Second data line of file" >> /tmp/myfile
sleep 3
echo "Last data line of file"   >> /tmp/myfile
wait                                             # In case the random delay is long, wait for the background sleep/cat to finish

If you run this repeatedly, you may get 1, 2 or 3 lines of output. You can compensate by the cat reading a file that is always the finished article, so more like:-
Code:
((random_delay=$RANDOM%9))

( sleep $random_delay ; cat /tmp/finalfile ) &   # Display the file at some undetermined time

date                             > /tmp/myfile
echo "First data line of file"  >> /tmp/myfile
sleep 3
echo "Second data line of file" >> /tmp/myfile
sleep 3
echo "Last data line of file"   >> /tmp/myfile

mv /tmp/myfile /tmp/finalfile                    # Atomic file write
wait                                             # In case the random delay is long, wait for the background sleep/cat to finish

It may fail first time if the file does not exist, but afterwards it would only ever read a completed file.

Doing this, you could also make a link as a "latest" file, so you always know which one to pick up.


I hope that this helps,
Robin
 

3 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Match list of strings in File A and compare with File B, C and write to a output file in CSV format

Hi Friends, I'm a great fan of this forum... it has helped me tone my skills in shell scripting. I have a challenge here, which I'm sure you guys would help me in achieving... File A has a list of job ids and I need to compare this with the File B (*.log) and File C (extend *.log) and copy... (6 Replies)
Discussion started by: asnandhakumar
6 Replies

2. Shell Programming and Scripting

Compare 2 text file with 1 column in each file and write mismatch data to 3rd file

Hi, I need to compare 2 text files with around 60000 rows and 1 column. I need to compare these and write the mismatch data to 3rd file. File1 - file2 = file3 wc -l file1.txt 58112 wc -l file2.txt 55260 head -5 file1.txt 101214200123 101214700300 101250030067 101214100500... (10 Replies)
Discussion started by: Divya Nochiyil
10 Replies

3. Shell Programming and Scripting

Shell script (sh file) logic to compare contents of one file with another file and output to file

Shell script logic Hi I have 2 input files like with file 1 content as (file1) "BRGTEST-242" a.txt "BRGTEST-240" a.txt "BRGTEST-219" e.txt File 2 contents as fle(2) "BRGTEST-244" a.txt "BRGTEST-244" b.txt "BRGTEST-231" c.txt "BRGTEST-231" d.txt "BRGTEST-221" e.txt I want to get... (22 Replies)
Discussion started by: pottic
22 Replies
Netpbm subroutine library: pm_make_tmpfile() function(3)     Library Functions Manual	  Netpbm subroutine library: pm_make_tmpfile() function(3)

NAME
pm_make_tmpfile() - create a temporary named file SYNOPSIS
#include <netpbm/pm.h> pm_make_tmpfile(FILE ** fileP, const char ** filenameP); EXAMPLE
This simple example creates a temporary file, writes 'hello world' to it, then writes some search patterns to it, then uses it as input to grep: #include <netpbm/pm.h> FILE * myfileP; const char * myfilename; pm_make_tmpfile(&myfileP, &myfilename); fprintf(myfile, '^account:s.*0); fprintf(myfile, '^name:s.*0); fclose(myFileP); asprintfN(&grepCommand, 'grep --file='%s' /tmp/infile >/tmp/outfile'); system(grepCommand); strfree(grepCommand); unlink(myfilename); strfree(myfilename); DESCRIPTION
This library function is part of Netpbm(1) pm_make_tmpfile() creates and opens a temporary file, returning to you a stream file handle for it and its name. pm_make_tmpfile() chooses a file name that is not already in use, with proper interlocking to make sure that it actually creates a file and opens the new file, as opposed to merely opening an existing file. If you don't need to access the file by name, use pm_tmpfile() instead, because it's cleaner. With pm_tmpfile(), the operating system always deletes the temporary file when your program exits, if the program failed to clean up after itself. The temporary file goes in the directory named by the TMPFILE environment variable. If TMPFILE is not set or is set to something unusable (e.g. too long), pm_tmpfile() falls back to the value of the standard C library symbol P_tmpdir (like the standard C library's tmpfile()). The name of the file within that directory is like myprog_blrfx, where myprog is the name of your program (arg 0) and the rest is an arbi- trary discriminator. If pm_make_tmpfile() is unable to create a temporary file, it issues a message to Standard Error and aborts the program. HISTORY
pm_tmpfile() was introduced in Netpbm 10.27 (March 2005). netpbm documentation 10 November 2007 Netpbm subroutine library: pm_make_tmpfile() function(3)
All times are GMT -4. The time now is 05:14 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy