如何使用awk对txt中的数据进行分组?
我有一组数据,如:如何使用awk对txt中的数据进行分组?,awk,grouping,Awk,Grouping,我有一组数据,如: firstname lastname state zipcode john doe oh 44110 jane doe ca 90210 john doe2 ca 90210 jane doe pa 19810 我的问题是如何使用AWK显示数据: firstname lastname state zipcode jane doe ca 90210
firstname lastname state zipcode
john doe oh 44110
jane doe ca 90210
john doe2 ca 90210
jane doe pa 19810
我的问题是如何使用AWK显示数据:
firstname lastname state zipcode
jane doe ca 90210
john doe2 ca 90210
我想列出所有来自某个州、有特定邮政编码的人
我试过了
awk '{print $1, $2, $7(state)= "California", $8(zip)= "90210"}'
这将显示:
firstname lastname California 90210
john doe california 90210
jane doe California 90210
James doe California 90210
而不是:
firstname lastname state zip
john doe California 90210
jane doe California 90210
James doe California 90210
试试这个:
awk 'NR==1||($3=="ca"&&$4==90210)' file
这将打印第一行,以及第三列为“ca”,第四列为90210的所有其他行。尝试以下操作:
awk 'NR==1||($3=="ca"&&$4==90210)' file
这将打印第一行,以及第三列为“ca”,第四列为90210的所有其他行。邮政编码已经包含状态信息,指定它是多余的
$ awk -v zip="90210" 'NR==1 || $NF==zip' file
我会给你
firstname lastname state zipcode
jane doe ca 90210
john doe2 ca 90210
我想您也希望将显示从州代码更改为州名称
$ awk -v zip="90210" 'NR==1 || $NF==zip {sub(/ca/,"California",$3);print} ' file
firstname lastname state zipcode
jane doe California 90210
john doe2 California 90210
但是,间隔现在被打破了。您必须将输出文件分隔符更改为tab
$ awk -v zip="90210" -v OFS="\t" 'NR==1 || $NF==zip {sub(/ca/,"California",$3);print} ' states
firstname lastname state zipcode
jane doe California 90210
john doe2 California 90210
差不多了,除了第一行。必须强制awk
更换字段分隔符
$ awk -v zip="90210" -v OFS="\t" 'NR==1{$1=$1;print;next} $NF==zip {sub(/ca/,"California",$3);print} ' states
firstname lastname state zipcode
jane doe California 90210
john doe2 California 90210
邮政编码已经包含州信息,指定它是多余的
$ awk -v zip="90210" 'NR==1 || $NF==zip' file
我会给你
firstname lastname state zipcode
jane doe ca 90210
john doe2 ca 90210
我想您也希望将显示从州代码更改为州名称
$ awk -v zip="90210" 'NR==1 || $NF==zip {sub(/ca/,"California",$3);print} ' file
firstname lastname state zipcode
jane doe California 90210
john doe2 California 90210
但是,间隔现在被打破了。您必须将输出文件分隔符更改为tab
$ awk -v zip="90210" -v OFS="\t" 'NR==1 || $NF==zip {sub(/ca/,"California",$3);print} ' states
firstname lastname state zipcode
jane doe California 90210
john doe2 California 90210
差不多了,除了第一行。必须强制awk
更换字段分隔符
$ awk -v zip="90210" -v OFS="\t" 'NR==1{$1=$1;print;next} $NF==zip {sub(/ca/,"California",$3);print} ' states
firstname lastname state zipcode
jane doe California 90210
john doe2 California 90210
如果要指定zip,则不需要指定state,这样就解决了将“California”映射到“ca”的问题。只要做:
$ awk -v zip="90210" '(NR==1) || ($4==zip)' file
firstname lastname state zipcode
jane doe ca 90210
john doe2 ca 90210
如果要指定zip,则不需要指定state,这样就解决了将“California”映射到“ca”的问题。只要做:
$ awk -v zip="90210" '(NR==1) || ($4==zip)' file
firstname lastname state zipcode
jane doe ca 90210
john doe2 ca 90210
这只返回标题,而不是实际的人名、状态或zipcode。很抱歉,我是这方面的初学者,或者可能我不太了解@user000001。如果第三个字段是“ca”,第四个字段是“90210”,那么将打印该行。再次检查您正在使用的示例,查看它是否与您在问题中发布的内容相匹配。这只返回标题,而不是实际的人名、状态或zipcode。很抱歉,我是这方面的初学者,或者可能我不太了解@user000001。如果第三个字段是“ca”,第四个字段是“90210”,那么将打印该行。再次检查您正在使用的示例,看看它是否与您在问题中发布的内容相匹配。数据集实际上非常庞大,有12个不同的列,但是我只需要第1、2、7和8列,即firstname、lastname、state和zip。我用上面的例子来说明数据是如何设置的,但是当我提交我尝试过的内容时,我忘记了将7和8更改为3和4,我理解并将在以后的文章中记住。这就是我想做的:显示居住在95111 zipcode中的us-500.csv中加利福尼亚人的列表?但是我被指示使用awk来找到答案。数据集实际上非常庞大,它有12个不同的列,但是我只需要第1、2、7和8列,即firstname、lastname、state和zip。我用上面的例子来说明数据是如何设置的,但是当我提交我尝试过的内容时,我忘记了将7和8更改为3和4,我理解并将在以后的文章中记住。这就是我想做的:显示居住在95111 zipcode中的us-500.csv中加利福尼亚人的列表?但是我被指示使用awk来找到答案。非常感谢,而且很简单。@TrinaJMoMoore很简单,但是如果将打印包含
ca
的行,那么如果有包含ca的名字或姓氏,也会打印出来,无论状态如何。非常感谢,它很简单。@TrinaJMoMoore很简单,但是if将打印包含ca
的行,因此如果有包含ca的名字或姓氏,它也将被打印,无论状态如何。