在固定长度文件的特定列中搜索多个模式并输出整行

在固定长度文件的特定列中搜索多个模式并输出整行

我需要 Unix 中的命令来查找固定长度文件中特定列中的模式并将整行输出到不同的文件。

示例文件1

2345abcdef450022677
1234sdfght350022677
3456abcdef350022677

如果第 5 列到第 10 列 = abcdef 并且第 15 列到第 16 列 = 22,我需要提取这些行。

我希望输出文件具有以下数据。

2345abcdef450022677
3456abcdef350022677

我可以使用带有 grep 的 cut 命令来查找模式,但不确定如何输出整行。

答案1

尝试这个

$ cat foo
2345abcdef450022677
1234sdfght350022677
3456abcdef350022677
$ grep -E '^.{4}abcdef.{4}22' foo >foo2
$ cat foo2
2345abcdef450022677
3456abcdef350022677
$

或者

$ awk 'substr($0,5,6)=="abcdef" && substr($0,15,2)=="22"' foo >foo2
$ cat foo2
2345abcdef450022677
3456abcdef350022677
$

甚至

$ grep '^....abcdef....22' foo >foo2
$ cat foo2
2345abcdef450022677
3456abcdef350022677
$

最后,使用 sed (检查第 5 到 10 是 abcdef,第 15 到 16 是 22,如果没有删除该行,请将此归功于 user112638726)

sed '/^.\{4\}abcdef.\{4\}22/p;d' foo

答案2

在 sed 中

sed '/^.\{4\}abcdef.\{4\}22/p;d' file

检查第 5 到 10 是否为 abcdef,第 15 到 16 是否为 22,如果不是则删除该行

相关内容