如何使用grep或awk提取csv中与txt列表匹配的目标行
问题原因
你写的awk命令存在3处错误,导致无法得到预期结果:
- 参数使用错误:指定分隔符的参数是
-F,你写的-f是用于加载awk脚本文件的参数,功能完全不匹配 - 分隔符配置错误:你的csv文件使用分号作为分隔符,但你配置的分隔符为逗号
- 没有提前加载待匹配的基因ID:
$1==text.txt的写法是无效的,awk无法直接识别text.txt为待匹配的文件内容,需要先把目标ID加载到内存中再判断匹配
正确实现命令
使用以下awk命令即可完成需求:
awk -F ';' 'NR==FNR {ids[$0]=1; next} $1 in ids' text.txt csvfile.csv > new.csv
命令逻辑说明
-F ';':指定输入文件的字段分隔符为分号,匹配你的csv文件格式NR==FNR {ids[$0]=1; next}:处理第一个输入文件text.txt时,将所有基因ID存入ids数组中,处理完text.txt前不会执行后续逻辑$1 in ids:处理第二个输入文件csvfile.csv时,判断当前行的第一个字段(基因ID)是否存在于ids数组中,存在则输出整行内容,最终输出的内容会保留原行所有字段
内容的提问来源于stack exchange,提问作者bart joosten
相关产品推荐
相关产品推荐

