The UNIX and Linux Forums  


Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
.
google unix.com



Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
sort certain patten ???not the whole file? nabmufti Shell Programming and Scripting 6 02-14-2008 10:54 AM
add columns from file to another and sort kamel.seg Shell Programming and Scripting 12 12-12-2007 02:39 PM
How to Sort a file for given situation? vishalpatel03 Shell Programming and Scripting 4 11-26-2007 10:53 AM
Sort and compare file sabercats Shell Programming and Scripting 3 03-27-2006 04:05 PM
how to sort a file tao UNIX for Dummies Questions & Answers 2 03-24-2002 11:34 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Search this Thread Rate Thread Display Modes
  #1 (permalink)  
Old 02-09-2008
mozart mozart is offline
Registered User
  
 

Join Date: Feb 2008
Posts: 1
sort csv file

hi guys.
i am quite new to shell scripting. and i've been practicing coding
in a CSV (comma separated value) file is it possible to sort a specific block?

what do i do if i want to sort these contacts by their birthdays in ascending order (Jan. to Dec.)? And i want only to display their name and birthday?

Here is the file

Sharapova,Maria,19-apr-1987,Brandenton FLorida,USA,admin@mariasharapova.com,+1(954)3387488
Bryant,Kobe,23-aug-1978,L.A. California,USA,kobe@lakers.comk+1(310)87890
Spielberg,Steven,18-dec-1946,L.A.California,USA,steven@dreamworks.com,+1(389)89098
Harnois,Elisabeth,26-may-1979,Detroit Michigan,USA,liz@1treehill.net,+1(313)74564536
Ryan,Michelle,22-apr-1984,Enfield London,UK,mryan@nbc.com,+44(207)2988410
Belle,Camilla,2-oct-19886,Miami Florida,USA,cam_65@hollywood.org, +1(954)3790491
Gellar,Sarah Michelle,14-apr-1977,L.A. California,USA,smg@buffy.com,+1(213)3398848m
Underwood,Carrie,10-mar-1983,Checotah Oklahoma,USA,carrieunderwood@rca.com,+1(918)655423

many thanks!!!
  #2 (permalink)  
Old 02-09-2008
KevinADC KevinADC is offline Forum Advisor  
Registered User
  
 

Join Date: Jan 2008
Posts: 731
Is perl acceptable?
  #3 (permalink)  
Old 02-09-2008
KevinADC KevinADC is offline Forum Advisor  
Registered User
  
 

Join Date: Jan 2008
Posts: 731
Well, hopefully I did this for more than my own amusement:


Code:
#!/usr/bin/perl
use warnings;
use strict;
my @months_numeric = qw(01 02 03 04 05 06 07 08 09 10 11 12);
my @months_alphas  = qw(jan feb mar apr may jun jul aug sep oct nov dec);
my %months;
@months{@months_alphas} = @months_numeric;
open (my $in , '<', 'path/to/celebs.csv') or die "$!";
my @sorted = map {$_->[0]}
             sort{$a->[1] cmp $b->[1]}
             map {chomp;
                  my $bd = (split(","))[2];
                  my ($d,$m,$y) = split("-",$bd);
                  $d = $d<10 ? "0$d" : $d;
                  [$_,"$y$months{$m}$d"]} <$in>;
close $in;
print "$_\n" for @sorted;

Assumes the months are all represented by three characters and are always all lower-case letters.
  #4 (permalink)  
Old 02-10-2008
drl's Avatar
drl drl is offline Forum Advisor  
Registered User
  
 

Join Date: Apr 2007
Location: Saint Paul, MN USA / BSD, CentOS, Debian, OS X, Solaris
Posts: 712
Hi, mozart.

Welcome to the forum. In the future please surround data with code tags so that we can read them easily, and do the same for scripts.

I added a few extra lines to exercise the sorting of fields. This script uses commands often found on *nix. The standard sort has an option for named months:

Code:
#!/usr/bin/env sh

# @(#) s1       Demonstrate sorting fields by transforming.

#  ____
# /
# |   Infrastructure BEGIN

echo
set -o nounset

debug=":"
debug="echo"

## The shebang using "env" line is designed for portability. For
#  higher security, use:
#
#  #!/bin/sh -

## Use local command version for the commands in this demonstration.

set +o nounset
echo "(Versions displayed with local utility \"version\")"
version >/dev/null 2>&1 && version =o $(_eat $0 $1) tr cut sort
set -o nounset

echo

FILE=${1-data1}
echo " Input file $FILE:"
cat $FILE

# |   Infrastructure END
# \
#  ---

echo
echo " Results from processing:"
tr ' ' '_' <$FILE |
tr ',-' ' ' |
cut -d" " -f1-5 |
sort --key=5,5 --key=4M,4 --key=3,3

exit 0

Producing:

Code:
% ./s1 data2

(Versions displayed with local utility "version")
Linux 2.6.11-x1
GNU bash, version 2.05b.0(1)-release (i386-pc-linux-gnu)
tr (coreutils) 5.2.1
cut (coreutils) 5.2.1
sort (coreutils) 5.2.1

 Input file data2:
Bryant,Kobe4,23-sep-1979,L.A. California,USA,kobe@lakers.comk+1(310)87890
Sharapova,Maria,19-apr-1987,Brandenton FLorida,USA,admin@mariasharapova.com,+1(954)3387488
Bryant,Kobe1,23-aug-1978,L.A. California,USA,kobe@lakers.comk+1(310)87890
Spielberg,Steven,18-dec-1946,L.A.California,USA,steven@dreamworks.com,+1(389)89098
Harnois,Elisabeth,26-may-1979,Detroit Michigan,USA,liz@1treehill.net,+1(313)74564536
Ryan,Michelle,22-apr-1984,Enfield London,UK,mryan@nbc.com,+44(207)2988410
Belle,Camilla,2-oct-19886,Miami Florida,USA,cam_65@hollywood.org, +1(954)3790491
Gellar,Sarah Michelle,14-apr-1977,L.A. California,USA,smg@buffy.com,+1(213)3398848m
Underwood,Carrie,10-mar-1983,Checotah Oklahoma,USA,carrieunderwood@rca.com,+1(918)655423
Bryant,Kobe3,23-sep-1978,L.A. California,USA,kobe@lakers.comk+1(310)87890
Bryant,Kobe2,24-aug-1978,L.A. California,USA,kobe@lakers.comk+1(310)87890

 Results from processing:
Spielberg Steven 18 dec 1946
Gellar Sarah_Michelle 14 apr 1977
Bryant Kobe1 23 aug 1978
Bryant Kobe2 24 aug 1978
Bryant Kobe3 23 sep 1978
Harnois Elisabeth 26 may 1979
Bryant Kobe4 23 sep 1979
Underwood Carrie 10 mar 1983
Ryan Michelle 22 apr 1984
Sharapova Maria 19 apr 1987
Belle Camilla 2 oct 19886

I like your music, I hope you like my opus s1 . See man pages for details ... cheers, drl
  #5 (permalink)  
Old 02-10-2008
sitney sitney is offline
Registered User
  
 

Join Date: Feb 2008
Posts: 21
Quote:
what do i do if i want to sort these contacts by their birthdays in ascending order (Jan. to Dec.)? And i want only to display their name and birthday?
Your requirements don't specify whether you want to sort by year first, but only by month. So this one liner should meet that requirement:


Code:
sort -t"," -k 3 -t"-" -k 2 -M birthdays.txt |awk -F"," '{print $1, $2, $3}'

  #6 (permalink)  
Old 02-10-2008
alamitab alamitab is offline
Registered User
  
 

Join Date: Jan 2007
Posts: 25
Sort by month

cat file | awk -F"," '{print $1, $2, $3}' | sort -M -t"-" -k 2
Closed Thread

Bookmarks

Tags
linux, linux commands

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT -4. The time now is 12:30 PM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
The UNIX and Linux Forums Content Copyright ©1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant URLs by vBSEO 3.2.0