我绝对是awk的初学者,并希望得到一些帮助。
我有这些数据:
FOO|BAR|1234|A|B|C|D|
FOO|BAR|1234|E|F|G|H|
FOO|BAR|5678|I|J|K|L|
FOO|BAR|5678|M|N|O|P|
FOO|BAR|5678|Q|R|S|T|
期望的输出:
FOO|BAR|1234|A|B|C|D|E|F|G|H|
FOO|BAR|5678|I|J|K|L|M|N|O|P|Q|R|S|T|
基本上我必须将一些字段附加到第3列匹配的行。
感谢任何回复,非常感谢!
答案 0 :(得分:1)
另一种方式:
awk -F"|" '$3 in a{
a[$3]=a[$3]"|"$4"|"$5"|"$6"|"$7;
next
}
{ a[$3]=$0
}
END {
for ( i in a) {
print a[i]
}
}'
答案 1 :(得分:1)
$ awk -f chain.awk < data
FOO|BAR|1234|A|B|C|D|E|F|G|H|
FOO|BAR|5678|I|J|K|L|M|N|O|P|Q|R|S|T|
$ cat chain.awk
BEGIN {FS = "|"}
$3==old {for(i = 4; i <= NF; i++) saved = saved (i>4?"|":"") $i}
$3!=old {if(old) print saved ; saved = $0 ; old = $3}
END {print saved}
$
BEGIN
我们设置字段分隔符$3==old
我们将字段$4 ... $NF
附加到已保存的数据中,将|
字段与第一个字段相连(注意有最后一个空字段)$3!=old
我们打印保存的数据(第一条记录除外,当old
为假时)我们重新启动机制END
我们仍在保存数据,我们必须将其打印出来