首页 > 解决方案 > 使用 AWK 编辑文本文件并制作新的文本文件

问题描述

我有一个逗号分隔的文本文件,它有 5 列,如下所示:

##Count,Frequency,Distance,Sequence,Translation
122712,0.0212055,20-30,GCATGTTTCGTTATGTCTGAAGGTTACGACGAATTCTGTGGCCCG,ACFVMSEGYDEFCGP
76501,0.0132199,20-30,GCATGTCCGCATGAATTCTTCGTTGAAGCTTACCCGTGTGGCCCG,ACPHEFFVEAYPCGP
60485,0.0104522,20-33,GCATGTCTGTCTCTGTTCGCTGAAGGTGAACTGCTGGACTGTGGCCCG,ACFVMSEGYDEFCGP
59365,0.0102587,20-30,GCATGTATCTCTATGGCTGAAGGTGACGACGACTGGTGTGGCCCG,ACISMAEGDDDWCGP

我正在尝试仅使用第 5 列的唯一值创建一个新文件(如果第 5 列中的值在其他行中重复,我将使用第一行并过滤掉其余行)。预期输出将如下所示:

##Count,Frequency,Distance,Sequence,Translation
122712,0.0212055,20-30,GCATGTTTCGTTATGTCTGAAGGTTACGACGAATTCTGTGGCCCG,ACFVMSEGYDEFCGP
76501,0.0132199,20-30,GCATGTCCGCATGAATTCTTCGTTGAAGCTTACCCGTGTGGCCCG,ACPHEFFVEAYPCGP
59365,0.0102587,20-30,GCATGTATCTCTATGGCTGAAGGTGACGACGACTGGTGTGGCCCG,ACISMAEGDDDWCGP

为此,我在AWK

awk '!h[$5]++ { NF--; print }' FS=, OFS=, infile.csv > outfile.csv

但它没有返回我的预期输出。你知道怎么解决吗?

标签: awk

解决方案


OP的代码可以简化为:

awk -F',' '!h[$5]++' infile.csv

这会产生:

122712,0.0212055,20-30,GCATGTTTCGTTATGTCTGAAGGTTACGACGAATTCTGTGGCCCG,ACFVMSEGYDEFCGP
76501,0.0132199,20-30,GCATGTCCGCATGAATTCTTCGTTGAAGCTTACCCGTGTGGCCCG,ACPHEFFVEAYPCGP
59365,0.0102587,20-30,GCATGTATCTCTATGGCTGAAGGTGACGACGACTGGTGTGGCCCG,ACISMAEGDDDWCGP

推荐阅读