awk - 使用 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
但它没有返回我的预期输出。你知道怎么解决吗?
解决方案
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
推荐阅读
- memory - 在LabVIEW FPGA中同时读取和写入内存?
- python - 如何使用 OpenstackSDK 获取项目配额?
- node.js - "scripts": { "test": "echo \"错误:没有指定测试\" && exit 1" },
- oracle-apex - 将顶点日历与谷歌日历集成
- google-pay - google订阅升级后收不到linkedPurchaseToken
- javascript - 在使用 canvas api 在浏览器中将 svg 转换为 png 时,svg 中的嵌入图像在 Safari 中随机为空白
- mysql - 我们可以在游标循环内的更新查询中使用内置函数吗?
- wordpress - 为什么一次执行多个查询会导致 Wordpress 出错,而 phpMyAdmin 不会?
- javascript - Promise 在 NodeJS 的 Cron 作业中不起作用
- flutter - 循环内部是异步的,外部怎么同步