如何在文本文件中的行中搜索两个位置之间的模式并打印找到该模式的整行?我正在处理固定宽度的文件。我了解如何向 提供每个字段的长度列表awk
,但我只对搜索模式的单个字段感兴趣。是否有更简单的解决方案,不涉及指定每个字段的长度?
这是文件中的一行文本。如何找到位置 18 和 57 之间且其他位置没有“Cook Co. IL”的所有线路?
17 031 1602 1600 Cook Co. IL 047 011 9999 9999 Bradley Co. TN 16
答案1
awk解决方案:
awk 'substr($0,18,57-18)~/Cook Co\. IL/' file
substr(字符串,开始[,长度])
返回一个长度- 字符长的子串细绳,从字符数开始开始。
答案2
指定字段宽度并不难,因为您只想将该行视为三个字段(0-17、18-57、58+):
awk -v FIELDWIDTHS="17 40" -e '$2 ~ /Cook Co\. IL/'
答案3
sed -e 'h; s/./&\n/57; /^.\{17\}.*Cook Co[.] IL.*\n/!d; g' yourfile
标记出右边界并使用 ^ 约束左边界。在此区域内查找正则表达式。如果找到,则打印具有 orig 的hold。线。