我有一个文件,其中包含姓名和电话号码列表,如下所示:
Smith,John 315-555-1212
Jones,Graham 315-234-2344
Aikman,Troy 312-153-3232
Young,Steve 415-343-3421
我需要一个命令字符串,它只输出带有“315”区号的行,输出没有区号的行,并根据姓氏排序。我希望输出看起来像这样:
琼斯,格雷厄姆234-2344
史密斯,约翰555-1212
到目前为止,我有这个用于获取列表。 “areacode”是我的文件的名称。如何打印已排序的名称列表并从输出中的名称列表中删除区号?
awk '$2~/315/ { print }' areacode
答案 0 :(得分:0)
grep ' 315-' areacode | awk '{ sub(/315-/ ,"" ); print $0}' | sort -t, -k1 > newfile
首先尝试一下,假设我得到了你的要求。这个(除了排序)也在awk中完成。
awk '/315-'/ { sub(/315-/ ,"" ); print $0 } ' areacode | sort -t, -k1 > newfile
答案 1 :(得分:0)
这是一种方法:
awk '/ 315-/ {sub(/315-/ ,"");print|sort}' sort="sort -t, -k1" areacode
Jones,Graham 234-2344
Smith,John 555-1212
答案 2 :(得分:0)
尝试如下...您可以传递您正在搜索的areacode参数...
awk '$2 ~ "^"areacode {split($2,a,"-"); print $1" "a[2]"-"a[3]}' areacode=315 myfile.txt | sort -t, -k2
传递区域315时的样本输出
Jones,Graham 234-2344
Smith,John 555-1212
答案 3 :(得分:0)
使用GNU awk:
awk -F'[ ,-]' '$3==315 { a[$2]=$1 } END { n=asorti(a,b); for(i=1;i<=n;++i) print b[i],a[b[i]] }' file
将行拆分为空格,逗号或连字符的字段。填充数组a
,其键是姓氏,值是forenames。处理完文件后,对数组键进行排序并循环遍历排序的数组。
使用awk并排序:
awk -F'[ ,-]' '$3==315 { print $2,$1 }' file | sort -k2
打印姓氏后跟姓氏,并按姓氏的字母顺序排序。
输出,使用任何一种方法:
Graham Jones
John Smith
如果你想保留原来的姓氏,姓氏和#34;格式,您可以改为使用(GNU awk):
awk -F'[ ,]' 'BEGIN { OFS="," } $3 ~ /^315/ { a[$2]=$1 } END { n=asorti(a,b); for(i=1;i<=n;++i) print a[b[i]],b[i] }' file
或者:
awk '$2 ~ /^315/ { print $1 }' file | sort -t, -k1
输出:
Jones,Graham
Smith,John
答案 4 :(得分:0)
$ sort -t, -k2 file | awk -v area="315" 'sub("^"area"-","",$2)'
Jones,Graham 234-2344
Smith,John 555-1212
或者如果您只想要名字:
$ sort -t, -k2 file | awk -v area="315" '$2 ~ "^"area{print $1}'
Jones,Graham
Smith,John