我可以在Excel中执行以下操作,但效率非常低。有人可以帮助我在AWK中编写这个逻辑,因为它是我正在学习的文件解析语言吗?
逻辑
匹配字段1.在所有匹配的行中打印field1中的匹配字段值和字段4的每个值,包括正在匹配的行。
输入文件:
ASHBBPRJ01-ASHBBPRJ02-BE ASHBBPRJ01.RD.AS 1 ASHBBBRJ01.RD.AS ae1.0 strict
ASHBBPRJ01-ASHBBPRJ02-BE ASHBBPRJ01.RD.AS 2 ASHBBPRJ02.RD.AS ae1.0 strict
ASHBBPRJ01-BSTNRCRJ01-BE ASHBBPRJ01.RD.AS 1 ASHBBBRJ01.RD.AS ae1.0 strict
ASHBBPRJ01-BSTNRCRJ01-BE ASHBBPRJ01.RD.AS 2 NYRKBBRJ02.RD.NY ae5.0 strict
ASHBBPRJ01-BSTNRCRJ01-BE ASHBBPRJ01.RD.AS 3 NYRKBBRJ01.RD.NY ae2.0 strict
ASHBBPRJ01-BSTNRCRJ01-BE ASHBBPRJ01.RD.AS 4 PROVBBRJ02.RD.RI ae3.0 strict
ASHBBPRJ01-BSTNRCRJ01-BE ASHBBPRJ01.RD.AS 5 PROVDSRJ02.RD.RI ae0.0 strict
ASHBBPRJ01-BSTNRCRJ01-BE ASHBBPRJ01.RD.AS 6 BSTNRCRJ01.RD.RI ae2.0 strict
ASHBBPRJ01-BSTNRCRJ02-BE ASHBBPRJ01.RD.AS 1 ASHBBBRJ01.RD.AS ae1.0 strict
ASHBBPRJ01-BSTNRCRJ02-BE ASHBBPRJ01.RD.AS 2 NYRKBBRJ02.RD.NY ae5.0 strict
ASHBBPRJ01-BSTNRCRJ02-BE ASHBBPRJ01.RD.AS 3 NYRKBBRJ01.RD.NY ae2.0 strict
ASHBBPRJ01-BSTNRCRJ02-BE ASHBBPRJ01.RD.AS 4 PROVBBRJ02.RD.RI ae3.0 strict
ASHBBPRJ01-BSTNRCRJ02-BE ASHBBPRJ01.RD.AS 5 PROVDSRJ02.RD.RI ae0.0 strict
ASHBBPRJ01-BSTNRCRJ02-BE ASHBBPRJ01.RD.AS 6 BSTNRCRJ02.RD.RI ae1.0 strict
输出
ASHBBPRJ01-ASHBBPRJ02-BE ASHBBBRJ01.RD.AS ASHBBPRJ02.RD.AS
ASHBBPRJ01-BSTNRCRJ01-BE ASHBBBRJ01.RD.AS NYRKBBRJ02.RD.NY NYRKBBRJ01.RD.NY PROVBBRJ02.RD.RI PROVDSRJ02.RD.RI BSTNRCRJ01.RD.RI
ASHBBPRJ01-BSTNRCRJ02-BE ASHBBBRJ01.RD.AS NYRKBBRJ02.RD.NY NYRKBBRJ01.RD.NY PROVBBRJ02.RD.RI PROVDSRJ02.RD.RI BSTNRCRJ02.RD.RI
答案 0 :(得分:1)
关注awk
可能对您有帮助。
awk '{a[$1]=a[$1]?a[$1] OFS $4:$4} END{for(i in a){print i,a[i]}}' Input_file
如果您想以相同的Input_file序列获取输出,那么以下内容可以帮助您。
awk '!b[$1]++{c[++i]=$1} {a[$1]=a[$1]?a[$1] OFS $4:$4} END{for(j=1;j<=i;j++){print c[j],a[c[j]]}}' Input_file
答案 1 :(得分:1)
您的输入已经订购
$ awk '{if($1==p) line=line OFS $4;
else {if(line) print line; p=$1; line=$1 OFS $4}}
END{print line}' file