Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 三重文件输入_Linux_Unix_Awk - Fatal编程技术网

Linux 三重文件输入

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) {

我有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) {
        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
。不幸的是,它不起作用,我将尝试几种解决方案,并更新问题。