Linux下筛选ID列第5-10位含2个及以上前导零的行
解决方案
直接用awk的正则匹配就能搞定,核心是判断ID第5-10位的子串是否以2个及以上前导零开头。
1. 输出符合条件的完整行
awk -F' *\\| *' 'substr($2, 5, 6) ~ /^0{2,}/' file.dat
2. 仅输出符合条件的ID列
awk -F' *\\| *' 'substr($2, 5, 6) ~ /^0{2,}/ {print $2}' file.dat
命令解释
-F' *\\| *':设置字段分隔符为带前后空格的管道,分割后$2就是纯ID(不会带原行里管道两侧的空格),保证substr取字符的位置准确substr($2, 5, 6):从ID的第5个字符开始,截取6个字符,正好对应你要的第5至第10位~ /^0{2,}/:正则匹配判断——^表示子串的开头,0{2,}表示连续2个或更多的0,满足这个条件的行就会被输出
针对你的示例输入测试
输入:
1 | 156700923134 | hkohin | 23
4 | 777754635373 | hhkdys | 45
3 | 678387700263 | ieysff | 09
用第一个命令会输出:
1 | 156700923134 | hkohin | 23
第二个命令会输出:
156700923134
内容的提问来源于stack exchange,提问作者HKohin
相关产品推荐
相关产品推荐

