按file1.txt顺序匹配输出file2.txt对应内容的技术需求
需求与解决方案
需求说明
现有两个文件:
- file1.txt:按固定顺序存放的SRR编号列表,内容如下:
SRR1071717 SRR1079830 SRR1081765 SRR1085402 SRR1086236 SRR1092208 SRR1093930 SRR1097296 SRR1099957 SRR1120296
- file2.txt:SRR编号与性别的映射(逗号分隔),内容如下:
SRR1120296,female SRR1099957,male SRR1097296,female SRR1093930,female SRR1092208,female SRR1086236,female SRR1085402,male SRR1081765,male SRR1079830,male SRR1071717,male
要求:严格保留file1.txt的原有顺序,输出对应的SRR编号及性别信息,不能使用sort命令(会打乱顺序),且两个文件行数相同,期望输出如下:
SRR1071717 male SRR1079830 male SRR1081765 male SRR1085402 male SRR1086236 female SRR1092208 female SRR1093930 female SRR1097296 female SRR1099957 male SRR1120296 female
解决方案
使用awk命令即可实现,核心思路是先将file2的映射关系存入数组,再按file1的顺序逐个匹配输出:
awk -F ',' 'NR==FNR{arr[$1]=$2; next} {print $0, arr[$0]}' file2.txt file1.txt
命令解释
-F ',':指定字段分隔符为逗号,用于解析file2的内容NR==FNR:当处理第一个文件(file2.txt)时执行此块:arr[$1]=$2:将SRR编号作为数组下标,性别作为对应值存入数组arrnext:跳过后续语句,继续处理file2的下一行
- 处理第二个文件(file1.txt)时,
print $0, arr[$0]:输出当前行的SRR编号,以及数组中对应的性别信息
内容的提问来源于stack exchange,提问作者Shafaque Zahra
相关产品推荐
相关产品推荐

