Linux 三重文件输入
我有3个文件,如下所示: 文件1: 文件2: 文件3: 注意,文件1、文件2和文件3的Linux 三重文件输入,linux,unix,awk,Linux,Unix,Awk,我有3个文件,如下所示: 文件1: 文件2: 文件3: 注意,文件1、文件2和文件3的NF分别为47、10和2 需要检查文件1中的$23是否等于2025,如果是,则将$21转换为$21*1000,然后将$1保存在数组中。 之后,从File2中获取从File1获得的$1 现在我们应该比较File1中的$21与File3中的$2如果值大于或等于,则从File1打印$1 上述文件的预期输出: 8755 我尝试了以下代码: awk -F"," '{ if (NF==47) {
NF
分别为47
、10
和2
需要检查文件1中的$23
是否等于2025
,如果是,则将$21
转换为$21*1000,然后将$1保存在数组中。
之后,从File2中获取从File1获得的$1
现在我们应该比较File1中的$21
与File3中的$2
如果值大于或等于,则从File1打印$1
上述文件的预期输出:
8755
我尝试了以下代码:
awk -F"," '{
if (NF==47) {
if ($23 ~ /2025/) {$21=$21*1000}
{A[$1]=$0}
} else {
if (NF==10) {
if (A[$1]==$0) {B[$1]=$0}
}
{if (NF==2) {
B[$1]==$0 && $21>=$2
}
{print $0}
}
}'
但输出总是文件3
请告知 试试这个:
awk -F',' '
NF == 47 { A[$1] = $23 ~ /2025/ ? $21*1000 : $21 }
NF == 10 { B[$2] = $1 }
NF == 2 && A[B[$1]] >= $2 { print B[$1] }'
试试这个:
awk -F',' '
NF == 47 { A[$1] = $23 ~ /2025/ ? $21*1000 : $21 }
NF == 10 { B[$2] = $1 }
NF == 2 && A[B[$1]] >= $2 { print B[$1] }'
试试这个:
awk -F',' '
NF == 47 { A[$1] = $23 ~ /2025/ ? $21*1000 : $21 }
NF == 10 { B[$2] = $1 }
NF == 2 && A[B[$1]] >= $2 { print B[$1] }'
试试这个:
awk -F',' '
NF == 47 { A[$1] = $23 ~ /2025/ ? $21*1000 : $21 }
NF == 10 { B[$2] = $1 }
NF == 2 && A[B[$1]] >= $2 { print B[$1] }'
您遇到的问题来自这样一个事实,即您将
、
和-
都计算为字段分隔符。另外,47
作为file1
中的许多字段是非常混乱的,因为在实际示例中只有25个字段(甚至将-
作为字段分隔符计算)。不管怎样,从问题中提取你们的文件,你们应该写出来
awk -F'[,-]' 'NF==25{ if($23==2025) $21=$21*1000; A[$1]=$21 }
NF==10{ B[$2]=$1 }
NF==2{ if(A[B[$1]]>=$2) print B[$1]}' file1 file2 file3
结果:
8755
根据您的实际情况将
NF==25
更改为NF==47
。您遇到的问题源于您将、
和-
都计算为字段分隔符。另外,47
作为file1
中的许多字段是非常混乱的,因为在实际示例中只有25个字段(甚至将-
作为字段分隔符计算)。不管怎样,从问题中提取你们的文件,你们应该写出来
awk -F'[,-]' 'NF==25{ if($23==2025) $21=$21*1000; A[$1]=$21 }
NF==10{ B[$2]=$1 }
NF==2{ if(A[B[$1]]>=$2) print B[$1]}' file1 file2 file3
结果:
8755
根据您的实际情况将
NF==25
更改为NF==47
。您遇到的问题源于您将、
和-
都计算为字段分隔符。另外,47
作为file1
中的许多字段是非常混乱的,因为在实际示例中只有25个字段(甚至将-
作为字段分隔符计算)。不管怎样,从问题中提取你们的文件,你们应该写出来
awk -F'[,-]' 'NF==25{ if($23==2025) $21=$21*1000; A[$1]=$21 }
NF==10{ B[$2]=$1 }
NF==2{ if(A[B[$1]]>=$2) print B[$1]}' file1 file2 file3
结果:
8755
根据您的实际情况将
NF==25
更改为NF==47
。您遇到的问题源于您将、
和-
都计算为字段分隔符。另外,47
作为file1
中的许多字段是非常混乱的,因为在实际示例中只有25个字段(甚至将-
作为字段分隔符计算)。不管怎样,从问题中提取你们的文件,你们应该写出来
awk -F'[,-]' 'NF==25{ if($23==2025) $21=$21*1000; A[$1]=$21 }
NF==10{ B[$2]=$1 }
NF==2{ if(A[B[$1]]>=$2) print B[$1]}' file1 file2 file3
结果:
8755
根据您的实际情况,将
NF==25
更改为NF==47
。什么是B[$1]==0和$23>=$2
应该做什么?这是一个比较表达式,但它不在if(…)@Barmar。。抱歉这个错误,它是$21>=$2,它是用来比较File1中转换的$21的值和File3中$2的值,如果$21>=$2,我需要从File1中获取该记录的$1。但是它不在if
中,所以它不做任何比较。它不应该像if(B[$1]=$0&$21>=$2){做点什么}
?@Barmar这是最后一个if语句的操作,不是吗?B[$1]==$0&&$23>=$2
应该做什么?这是一个比较表达式,但它不在if(…)@Barmar。。抱歉这个错误,它是$21>=$2,它是用来比较File1中转换的$21的值和File3中$2的值,如果$21>=$2,我需要从File1中获取该记录的$1。但是它不在if
中,所以它不做任何比较。它不应该像if(B[$1]=$0&$21>=$2){做点什么}
?@Barmar这是最后一个if语句的操作,不是吗?B[$1]==$0&&$23>=$2
应该做什么?这是一个比较表达式,但它不在if(…)@Barmar。。抱歉这个错误,它是$21>=$2,它是用来比较File1中转换的$21的值和File3中$2的值,如果$21>=$2,我需要从File1中获取该记录的$1。但是它不在if
中,所以它不做任何比较。它不应该像if(B[$1]=$0&$21>=$2){做点什么}
?@Barmar这是最后一个if语句的操作,不是吗?B[$1]==$0&&$23>=$2
应该做什么?这是一个比较表达式,但它不在if(…)@Barmar。。抱歉这个错误,它是$21>=$2,它是用来比较File1中转换的$21的值和File3中$2的值,如果$21>=$2,我需要从File1中获取该记录的$1。但是它不在if
中,所以它不做任何比较。它不应该像if(B[$1]=$0&$21>=$2){做点什么}
?@Barmar这是最后一个if语句的操作,不是吗?此程序将只打印1美元的文件3。已修复。我刚刚用您的文件测试了它,它正确地打印了8755
。不幸的是,它不起作用,我将尝试几种解决方案,并更新问题。谢谢你的帮助。这个程序将只打印$1的文件3。修复了它。我刚刚用您的文件测试了它,它正确地打印了8755
。不幸的是,它不起作用,我将尝试几种解决方案,并更新问题。谢谢你的帮助。这个程序将只打印$1的文件3。修复了它。我刚刚用您的文件测试了它,它正确地打印了8755
。不幸的是,它不起作用,我将尝试几种解决方案,并更新问题。谢谢你的帮助。这个程序将只打印$1的文件3。修复了它。我刚刚用您的文件测试了它,它正确地打印了8755
。不幸的是,它不起作用,我将尝试几种解决方案,并更新问题。