shell - 提取第三列中字符匹配的行
问题描述
我需要提取我的第 3 列等于的行38
。
我正在尝试以下命令:
awk '{printf "$3=38"}' file
示例文件内容:
TRINITY_DN66807_c0_g1_i1 4 * 0 0 * * 0 0 TTTAAGAAAATTACAGCCTGAACTAGATGAATTGCAAAAACTCATAGGCAAAAAGGAAGAAGAAATTGGATACGT *
TRINITY_DN66871_c0_g1_i1 4 * 0 0 * * 0 0 AAGAGGACATAGAAACTGTGATGATAATAGTATTGCTCTACTATTTCCTATAGCTCAGTTATTCAGCTGTCAGTC *
TRINITY_DN66847_c0_g1_i1 0 38 2520299 37 274M * 0 0 CTCTCCTAGGATGCAGGATGGCCTCTTGCCACCTACACCCTTCTTCATGGGTTCGGCCCTTGGTCAACTAAAGGA * XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:274
TRINITY_DN66836_c0_g1_i1 0 38 21725268 37 733M * 0 0 TAGATGATGAAACTGGGTTGACCCTTGTTCCTAAGACTCAGTCCAGAGAGTCCTGGACTTTGCACTTTGGTTAGATGCCCCTGCCCCTCCCGCCAGCGCTGAGGAGGAATCACGCAGGCCTGAACAGAACATTCAGGTGATCCTATGAAG * XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:733
解决方案
当您使用时,{printf "$3=38"}'
您告诉 awk 在$3=38
找到一行时打印文字。您需要使用条件,即大括号外的表达式。
利用
awk '$3 ~ /^38$/' file
在线查看演示。这$3 ~ /^38$/
是一个正则表达式匹配检查,字段 3 值针对^38$
匹配整个字符串等于的正则表达式进行测试38
。
或者,使用简单的字符串相等比较(因为38
是静态文本):
awk '$3 == "38"' file
推荐阅读
- c# - 错误数组中的 ASP.NET Core 空验证字符串条目?
- python - 在 Tkinter 中将参数传递给方法
- css - 如何为第 n 个类型添加不同的颜色
- javascript - 如何获得一周的日期
- google-apps-script - Google App Script - 如何从分配给变量的单元格值中减去 7 天?
- html - 位置下的粘性表格标题:固定和顶部:0 元素(粘性标题)
- c++ - 重新初始化向量的两种方法之间有什么区别吗?
- jenkins - emailext EmailDL 在电子邮件阶段之外的使用
- java - 使用 OpenAPI3RouterFactory 和 EventBus 上传 Vertx Web API 服务文件
- c# - C#“无法将类型的对象转换为另一种类型。抛出异常