请提供建议,因为我有记录列表但我需要查明我的记录是否有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;
答案 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
解决方案比grep
或sed
解决方案更容易阅读。