基于第2列值判断第3列唯一性,为每行添加same/diff标记
按列分组标记文本行的一致性
原始文件内容
$ cat test.txt 49808830/ccs 9492 TACA 3 175833950/ccs 971 ACCC 1 180422692/ccs 971 ACCC 10 110952448/ccs 9714 TAGAG 2 117309969/ccs 9714 TAGAG 4 119998610/ccs 9714 TAGAG 5 171509463/ccs 9714 TAGAT 4
需求说明
针对上述文本文件,需按第二列的唯一值分组处理:
- 若某组内所有行的第三列值仅存在一种,则给该组所有行末尾添加
same - 若组内第三列存在多种不同值,则给该组所有行末尾添加
diff
解决方案
使用awk命令完成两次扫描即可实现:
awk 'NR==FNR {arr[$2][$3]++; next} {print $0, (length(arr[$2]) == 1 ? "same" : "diff")}' test.txt test.txt
命令逻辑
- 第一次遍历文件(
NR==FNR):用二维数组arr[$2][$3]记录每个第二列对应的第三列值出现情况,通过length(arr[$2])可获取该组内第三列的不同值数量 - 第二次遍历文件:判断当前行第二列对应的第三列不同值数量,等于1则输出行内容加
same,否则加diff
预期输出
49808830/ccs 9492 TACA 3 same # 第二列唯一,对应第三列仅一种值,标记same 175833950/ccs 971 ACCC 1 same 180422692/ccs 971 ACCC 10 same 110952448/ccs 9714 TAGAG 2 diff 117309969/ccs 9714 TAGAG 4 diff 119998610/ccs 9714 TAGAG 5 diff 171509463/ccs 9714 TAGAT 4 diff # 该组第三列存在TAGAG和TAGAT两种值,标记diff
内容的提问来源于stack exchange,提问作者pedro
相关产品推荐
相关产品推荐

