如何从多个CSV打印一次组名和组名以下的成员

  • 本文关键字:一次 成员 CSV 打印 bash csv awk
  • 更新时间 :
  • 英文 :


下面是我的代码,它从多个CSV中提取并打印组名及其登录的成员。

cat *csv | awk '{print $3,$4}' > /output/userreport.txt
问题是它多次打印出组名

这是当前输出示例
John,Marketing
Bob,Marketingon,Marketing
Todd,Finance
Tim,Finance

所需输出为
营销
John
Bob
Ron

财务
Todd
Tim

我将使用GNUAWK执行以下任务,让file.csv内容为

A, B, John, Marketing
C, D, Bob, Marketing
E, F, Ron, Marketing
G, H, Todd, Finance
I, J, Tim, Finance

然后

awk 'BEGIN{FS=", "}{if(group!=$4){group=$4;print $4};print $3}' file.csv

输出

Marketing
John
Bob
Ron
Finance
Todd
Tim

说明:我指示awk将空格逗号作为字段分隔符(FS(,然后如果组与上次看到的不同(或者如果还没有处理任何内容,则为空字符串(,则打印组名。每行打印第三列的内容。

(在GNU Awk 5.0.1中测试(

另一个awk

$ awk -F"," ' { if( !($4 in a) ) { print $4 }  a[$4]++; print $3 } ' ali.txt
Marketing
John
Bob
Ron
Finance
Todd
Tim

或更短形式的

awk -F"," '  !($4 in a)  { print $4 } { a[$4]++; print $3 } ' ali.txt

最新更新