如何打印某个字段小于某个输入值的文件中的所有行
how to print all lines in a file which has certain field less than some input value
我有一个文件 file_name,其中包含以下几行:
line1: Order='O1', ProductDetail: [Product='P1', Weight=100, Unit=Kg], ProductDetail: [Product='P2', Weight=90, Unit=Kg], ProductDetail: [Product='P3', Weight=110, Unit=Kg]
line2: Order='O2', ProductDetail: [Product='P1', Weight=100, Unit=Kg], ProductDetail: [Product='P2', Weight=100, Unit=Kg], ProductDetail: [Product='P3', Weight=110, Unit=Kg]
预期输出:
line1: Order='O1', ProductDetail: [Product='P1', Weight=100, Unit=Kg], ProductDetail: [Product='P2', Weight=90, Unit=Kg], ProductDetail: [Product='P3', Weight=110, Unit=Kg]
理想的预期输出:
line1: Order='O1', [Product='P2', Weight=90, Unit=Kg]
我需要打印重量小于 100 的任何产品的所有行。我将如何实现?
一个不太稳健的方法是:
$ awk -F'[ =,]' '{for(i=1;i<NF;i++)
if($i=="Weight" && $(i+1)<100)
{print; next}}' file
line1: Order='O1', ProductDetail: [Product='P1', Weight=100, Unit=Kg], ProductDetail: [Product='P2', Weight=90, Unit=Kg], ProductDetail: [Product='P3', Weight=110, Unit=Kg]
根据输入文件的结构设置分隔符,找到搜索标签 "Weight" 并检查下一个字段中的值(由于 =
分隔符)。
awk 的另一种方式:
awk '
{
i = split ( [=10=] , a , /Weight=/ )
for ( j = 2 ; j <= i ; j++ ) {
sub ( /,.*/ , "" , a[j] )
if ( a[j]+0 < 100 ) {
print
next
}
}
}
' infile
我有一个文件 file_name,其中包含以下几行:
line1: Order='O1', ProductDetail: [Product='P1', Weight=100, Unit=Kg], ProductDetail: [Product='P2', Weight=90, Unit=Kg], ProductDetail: [Product='P3', Weight=110, Unit=Kg]
line2: Order='O2', ProductDetail: [Product='P1', Weight=100, Unit=Kg], ProductDetail: [Product='P2', Weight=100, Unit=Kg], ProductDetail: [Product='P3', Weight=110, Unit=Kg]
预期输出:
line1: Order='O1', ProductDetail: [Product='P1', Weight=100, Unit=Kg], ProductDetail: [Product='P2', Weight=90, Unit=Kg], ProductDetail: [Product='P3', Weight=110, Unit=Kg]
理想的预期输出:
line1: Order='O1', [Product='P2', Weight=90, Unit=Kg]
我需要打印重量小于 100 的任何产品的所有行。我将如何实现?
一个不太稳健的方法是:
$ awk -F'[ =,]' '{for(i=1;i<NF;i++)
if($i=="Weight" && $(i+1)<100)
{print; next}}' file
line1: Order='O1', ProductDetail: [Product='P1', Weight=100, Unit=Kg], ProductDetail: [Product='P2', Weight=90, Unit=Kg], ProductDetail: [Product='P3', Weight=110, Unit=Kg]
根据输入文件的结构设置分隔符,找到搜索标签 "Weight" 并检查下一个字段中的值(由于 =
分隔符)。
awk 的另一种方式:
awk '
{
i = split ( [=10=] , a , /Weight=/ )
for ( j = 2 ; j <= i ; j++ ) {
sub ( /,.*/ , "" , a[j] )
if ( a[j]+0 < 100 ) {
print
next
}
}
}
' infile