CSV仅对特定列进行排序

时间:2012-10-30 19:27:11

标签: shell csv

所以我已经看过这个以逗号分隔的文件: 我需要一个打印看起来如下 “ 姓氏,电话号码,邮编

对于姓氏以字母H开头的每个人,我

仅限650个区号的电话号码。输出应按反向邮政编码“

排序

我只有四列,例如:

Harris, K, (650)345-1760 1200, Ellis Street Suite 230 Mountain CA 93042
Mitchell, A, (212)-555-1234 650, This Street NY NY 01234
Thomson, F, (650)-999-9999 1450, The Terrace Avenue Stratford MA 10101
irvin, h, (650)678-2445 12345, denver st santa clara 96503

我以为我使用这段代码走上了正确的道路:

cat data.csv | awk -F"," '{print $1, $2, $3, $4}' |sort -t ',' -k1|grep "(650)"

然后试着只刷一下姓氏的第一个字母......

cat data.csv | awk -F "," '$1~/"H*"/' '{print $1, $2, $3, $4}'

但不断出错。 我怎样才能只搜索第一个字母以及最后一列中的字符串的一部分以及相反的顺序?(我想用排序?)

2 个答案:

答案 0 :(得分:0)

您可能需要查看r17,这是一个可以帮助完成任务的工具。

答案 1 :(得分:0)

awk -F', ' '
    toupper($1) ~ /^[HI]/ && $3 ~ /^\(650\)/ {
        n = split($NF, ary, " ")
        print ary[n] ":" $0
    }
' filename |
sort -rn |
cut -d: -f2-

产生

irvin, h, (650)678-2445 12345, denver st santa clara 96503
Harris, K, (650)345-1760 1200, Ellis Street Suite 230 Mountain CA 93042