请告知,因为我有记录列表,但我需要查明我的记录是否有 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;
最佳答案
看起来 awk
再次出手相助:
awk -F '|' 'NF == 6 && $1 == "abc" { print }'
如果有5个分隔符,则有6个字段。您可以省略 { print }
,因为这是默认操作。如果您需要将值 abc
传递给脚本(它可能会有所不同),请使用:
awk -F '|' -v string=abc 'NF == 6 && $1 == string { print }'
不要尝试使用 match
作为变量名。
我的回答是基于这个问题,它说:
if my record has 5 pipe delimiter and first name matches then print it
意思是“如果记录有 6 个由管道分隔符分隔的字段(因此有 5 个管道)并且第一个字段与给定名称匹配,则打印整个记录”。如果问题的含义略有不同,则必须相应地修改答案。
这是 Unix;还有其他方法可以完成相同的任务,包括:
grep '^abc|[^|]*|[^|]*|[^|]*|[^|]*|[^|]*$'
sed -n -e '/^abc\(|[^|]*\)\{5\}$/p'
您可以使用 Perl 或 Python,或者……选择您最喜欢的脚本语言。但是,awk
解决方案比 grep
或 sed
解决方案更易于阅读。
关于linux - 在管道定界符的基础上传递字符串/记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24359212/