在管道分隔符的基础上传递字符串/记录

时间:2014-06-23 05:54:32

标签: linux unix

请提供建议,因为我有记录列表但我需要查明我的记录是否有5个管道分隔符和名字匹配然后打印它。

例如:

abc|def|ghi|lmno|pq|rs
abc|def|ghi|lmno
abc|def|ghi
dpo|def|ghi|lmno|fr|pl|nm

但我想只有第一个值才能传递。

if ($string contains "abc" && 5 pipe delimiter )
print $string;

1 个答案:

答案 0 :(得分:1)

看起来awk再次出现在救援中:

awk -F '|' 'NF == 6 && $1 == "abc" { print }'

如果有5个分隔符,则有6个字段。您可以省略{ print },因为这是默认操作。如果您需要将值abc传递给脚本(可能会有所不同),请使用:

awk -F '|' -v string=abc 'NF == 6  && $1 == string { print }'

请勿尝试将match用作变量名称。

我的回答是基于这个问题,其中说:

  

如果我的记录有5个管道分隔符和名字匹配,则打印它

表示'如果记录有6个由管道分隔符分隔的字段(因此有5个管道)并且第一个字段与给定名称匹配,则打印整个记录'。如果问题意味着略有不同,那么必须相应地修改答案。

这是Unix;还有其他方法可以完成相同的任务,包括:

grep '^abc|[^|]*|[^|]*|[^|]*|[^|]*|[^|]*$'
sed -n -e '/^abc\(|[^|]*\)\{5\}$/p'

您可以使用Perl或Python或...选择您喜欢的脚本语言。但是,awk解决方案比grepsed解决方案更容易阅读。