gpt4 book ai didi

awk - 使用 awk 删除并汇总 csv 文件元素

转载 作者:行者123 更新时间:2023-12-02 18:31:29 25 4
gpt4 key购买 nike

我有一个大的 csv 文件,如下例所示:

9,AGCTGTCCTCTT,SCPL
9,AGCTGTCATTTTGTTTCG,SCHFVS
9,AGCTGTAATTGTCGTAAGAGGTCTGCTTATTGTTATTTGTGTGGCCCG,SCNCRKRSAYCYLCGP
9,AGCTGTCCTCTT,SCPL
9,AGCTGTAGTCATTTGGGTTTTATTTGTTTTCATGGCATTGTGGCCCG,

1 - 在某些行中,第三列为空,因此应将其删除

2 - 某些行在第三列中具有相似的字符。如果是这种情况,我想对第一列中的值求和并将其放入第四列中。如果第3列中的字符在其他行中不重复,我想将第1列的值复制到第4列。

预期输出:

9,AGCTGTCCTCTT,SCPL,18
9,AGCTGTCATTTTGTTTCG,SCHFVS,9
9,AGCTGTAATTGTCGTAAGAGGTCTGCTTATTGTTATTTGTGTGGCCCG,SCNCRKRSAYCYLCGP,9

为此,我在 awk 中编写了以下代码,但它没有返回预期的输出。

awk -F "," '{ if(($3 == '') && ({t=3;for(i=2;i<NF;i++){t+=$i==$(i+1)}}t==NF)) { print } }' infile.csv > outfile.csv

你知道我如何更改代码以获得预期的输出吗?

最佳答案

根据显示的示例,请尝试执行以下 awk 程序。简单的解释是,根据第一个、第二个和第三个字段对 Input_file 进行排序,首先将 , 作为字段分隔符。然后将其标准输出传递给 awk 程序作为输入。在awk程序中设置字段分隔符和输出字段分隔符为,。创建变量 sum,不断向其添加第一个字段值,直到当前行与上一行不同。

sort -t, -r -k1 -k2 -k3 file | 
awk '
BEGIN{
FS=OFS=","
}
prev!=$0 && prev{
print prev,sum
sum=prev=""
}
NF>=3 && $3!=""{
sum+=$1
prev=$0
}
END{
if(sum){
print prev,sum
}
}
'

关于awk - 使用 awk 删除并汇总 csv 文件元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69375889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com