sort by datetime format in bash
Sort is able to deal with month names, thanks to the option M
No need to change ,
into !
. Use the white space as delimiter and just issue:
LC_ALL=en sort -k7nr -k5Mr -k6nr -k2r sample
If you use this as content of the file sample
:
ip=2.3.4.5, setup_time=05:59:30.260 GMT Tue Apr 1 2021, foo=moshe2, bar=haim2
ip=2.3.4.5, setup_time=05:59:30.260 GMT Tue Mar 17 2021, foo=moshe2, bar=haim2
ip=1.2.3.4, setup_time=06:58:38.617 GMT Tue Mar 16 2021, foo=moshe, bar=haim
ip=1.2.3.4, setup_time=06:58:38.617 GMT Tue Feb 28 2021, foo=moshe, bar=haim
ip=2.3.4.5, setup_time=06:50:30.260 GMT Tue Mar 18 2020, foo=moshe2, bar=haim2
ip=2.3.4.5, setup_time=06:50:30.260 GMT Tue Mar 18 2021, foo=moshe2, bar=haim2
you will get this as output:
ip=2.3.4.5, setup_time=05:59:30.260 GMT Tue Apr 1 2021, foo=moshe2, bar=haim2
ip=2.3.4.5, setup_time=06:50:30.260 GMT Tue Mar 18 2021, foo=moshe2, bar=haim2
ip=2.3.4.5, setup_time=05:59:30.260 GMT Tue Mar 17 2021, foo=moshe2, bar=haim2
ip=1.2.3.4, setup_time=06:58:38.617 GMT Tue Mar 16 2021, foo=moshe, bar=haim
ip=1.2.3.4, setup_time=06:58:38.617 GMT Tue Feb 28 2021, foo=moshe, bar=haim
ip=2.3.4.5, setup_time=06:50:30.260 GMT Tue Mar 18 2020, foo=moshe2, bar=haim2
Specifying -k7
means to sort on the seventh field. The r
option reverses the order of sorting to descending. The M
option sorts according the name of the month. The n
option sorts numerically. To sort on the time, just consider the whole second field (beginning with the string setup_time=
) as a fixed length string using -k2
.
LC_ALL=en
in the begin of the command line tells the system to use the English names of the months.
How to sort a file with timestamp having date and time
sort -k1,1 -k2n,2n
worked perfectly fine!
sort logfile by timestamp on linux command line
Use sort's -k flag:
sort -k1 -r freeswitch.log
That will sort the file, in reverse, by the first key (i.e. freeswitch.log:2011-09-08 12:21:07.282236). If the filename is always the same (freeswitch.log), then it should sort by the date.
Sort `.bash_history` by timestamp
Disclaimer: This might not be the most elegant and simplest solution.
However the following bash shell script snippet worked for me:
#!/bin/bash
function BashHistoryJoinTimestampLines() {
COMMAND_WITHOUT_TIMESTAMP=TRUE
while read line; do
if [ "${line:0:1}" = "#" ] # This should be a timestamp line
then echo -ne "$line\t" # the -n option supresses the line feed
COMMAND_WITHOUT_TIMESTAMP=FALSE
else if [ ${COMMAND_WITHOUT_TIMESTAMP} = TRUE ]
then echo -ne "#0\t"
fi
echo $line
COMMAND_WITHOUT_TIMESTAMP=TRUE
fi
done
}
#
# Example:
BashHistoryJoinTimestampLines < $HISTFILE | sort
In Unix/Linux text processing by pipelining the sort
utility program by default operates on records separated by line endings.
In order to use "sort
" for this application the timestamp lines have to be first joined together with the history lines containing the commands. Lines not preceeded by a time stamp will get a dummy timestamp of #0
(January 1st 1970) in this script. I've used the TAB character as a separator between timestamp and command in this script.
How to sort the files according to the time stamp in unix?
File modification:
ls -t
Inode change:
ls -tc
File access:
ls -tu
"Newest" one at the bottom:
ls -tr
None of this is a creation time. Most Unix filesystems don't support creation timestamps.
Sort logs by date field in bash
For GNU sort: sort -k2M -k3n -k4
-k2M
sorts by second column by month (this way "March" comes before "April")-k3n
sorts by third column in numeric mode (so that " 9" comes before "10")-k4
sorts by the fourth column.
See more details in the manual.
Related Topics
Best Way to Set Environment Variables in Calling Shell
How to Connect a Shell to a Pseudo Tty
How to Not Transfer Changes Done to Files from a Branch to a Another in Git
Copy Files from Windows to Windows Subsystem for Linux (Wsl)
How to Diff Directories Over Ssh
Abuse Curl to Communicate with Redis
How to Statically-Link a Complex Program
Ldconfig Error:"Is Not a Symbolic Link" When Using Linux Loader
Cmake Complains "The Cxx Compiler Identification Is Unknown"
How to Count the Number of Occurrences of a String in an Entire File
Printing Variable to Command Line Using Assembly in Linux
How to Ssh Multiple Hops Without Putting the Local Rsa Key Everywhere
Does Os X Have an Equivalent to /Dev/Shm
How to Use 'Mv' Command to Move Files Except Those in a Specific Directory