Linux Awk-如何剪切一行,检查一列是否匹配,打印另一列?
我有一个像这样的LaaaArge文件:Linux Awk-如何剪切一行,检查一列是否匹配,打印另一列?,linux,bash,shell,unix,awk,Linux,Bash,Shell,Unix,Awk,我有一个像这样的LaaaArge文件: VENDOR|QTY|ITEM|PRICE 2|3|Sugar|15 3|3|Coffee|35 4|244|Sugar2|55 33|2|Pizza|36 3|3|Pizza|55 5|5|Pizza2|33 6|6|Pizza3|44 如何打印供应商和价格 我试过grep,但速度很慢 我可以像这样编写python代码 for line in file: fields = line.split('|') if fields[2] ==
VENDOR|QTY|ITEM|PRICE
2|3|Sugar|15
3|3|Coffee|35
4|244|Sugar2|55
33|2|Pizza|36
3|3|Pizza|55
5|5|Pizza2|33
6|6|Pizza3|44
如何打印供应商和价格
我试过grep,但速度很慢
我可以像这样编写python代码
for line in file:
fields = line.split('|')
if fields[2] == 'Pizza':
print fields[0], fields[-1]
但我想用外壳本身的Awk来做。我该怎么做
更新
如何检查子字符串呢
如果比萨饼出现在项目中,我想输出供应商
和价格
输出应为:
33|36
3|55
5|33
6|44
因此:
$ awk -F\| '$3=="Pizza" {print $1,$4}' file
33 36
3 55
解释
-F\|
将|
设置为字段分隔符
$3==“Pizza”
检查第三个字段是否为“Pizza”
{print$1,$4}
打印第一个和第四个字段
更新
如果比萨饼出现在项目中,我想输出供应商
和价格
解释
$3~/Pizza/
检查“发生”,以及$3==“Pizza
检查精确匹配
BEGIN{OFS=FS=“|”}
将(输入和输出)字段分隔符设置为|
将在11分钟内接受:)这也是最有效的方法吗?因为我也在寻找速度:)我认为这是非常有效的。无论如何,一些专家可能会提供更好的解决方案,可能是在sed
中。然后你可以在命令前使用时间
比较他们的效率。注意,我更新了我的答案,以便输出是用|
编写的,我错过了更新的那部分:)
$ awk 'BEGIN{OFS=FS="|"} $3~/Pizza/ {print $1,$4}' file
33|36
3|55
5|33
6|44