2015-09-25 39 views
1

我有一组类似的数据:如何使用awk对来自txt的数据进行分组?

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 
+0

数据集实际上是真正巨大的,它有一个像12个不同的列,但是我只需要在第一,第二,第七和第八列是名字,姓氏,州和邮编。我使用上面的例子来说明如何设置数据,但是当我提交了我尝试的内容时,我忘记将7和8更改为3和4,例如 –

+0

我理解并将记住将来的帖子。这正是我想要做的:从us-500.csv显示加利福尼亚州的人员列表,居住在95111邮政编码?但我被指示使用awk来找到答案。 –

回答

2
awk 'NR==1 || /ca/' file 
firstname lastname state zipcode 
jane   doe ca 90210 
john   doe2 ca 90210 
+0

非常感谢你,它很简单。 –

+0

@TrinaJMoMoore它很简单,但是如果会在行的任何位置打印包含'ca'的行,所以如果有名字或包含ca的姓氏,它也会打印出来,而不管状态如何。 – user000001

1

尝试这种情况:

awk 'NR==1||($3=="ca"&&$4==90210)' file 

这将打印的第一行,和所有其他线,其中第三列是 “CA” 和第四列是90210.

+0

这只返回标题不是实际的人名,州或邮编。我很抱歉我是初学者,或者我不太明白@ user000001 –

+1

如果第三个字段是“ca”,第四个字段是“90210”,则会打印此行。再次检查您正在使用的样本,看看它是否与您在问题中发布的内容相符。 – user000001

1

邮政编码已包含状态信息,指定它将是多余的。

$ 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 

然而,间距现在打破。您必须将输出文件分隔符更改为选项卡。

$ 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 
1

你并不需要,如果你指定的zip指定状态和解决您的试图映射“加州”到“CA”的问题。只要做到:

$ awk -v zip="90210" '(NR==1) || ($4==zip)' file 
firstname lastname state zipcode 
jane   doe ca 90210 
john   doe2 ca 90210 
相关问题