【问题标题】:awk list of files - output print only one line per inputfileawk 文件列表 - 每个输入文件仅输出一行
【发布时间】:2018-09-02 10:44:22
【问题描述】:

我想从输入文件列表中提取数据。 如果字符串包含“日期”,我需要 $1,如果字段 $3 是“Sum”,我需要 $4、$5、$6 和 $7。输入是制表符分隔的。 input1.txt

Bla-1                       
Bla-2                       
Bla-3                       
Report                      
Date 2016.01.04                     
Blub-a                      
Blub-b                      
Blub-c                      
Blub-n                      
    text    text    amount  fee fee2    transit
        bluber  50  5   1   
        blubber 40  4   1   
        blubbest    10  1   1   
        Sum 100 10  3   87

input2.txt

Bla-1                       
Bla-2                       
Bla-3                       
Report                      
Date 2016.01.11                     
Blub-1                      
Blub-2                      
Blub-3                      
Blub-n                      
    text    text    amount  fee fee2    transit
        bluber  50  5   1   
        blubber 40  4   1   
        blubbest    10  1   1   
        Sum 200 10  10  180

我的输出是:

Date     Sum     Sum of Fee      Transit
2016.01.04          
2016.01.04          
2016.01.04          
2016.01.04          
2016.01.04          
2016.01.04          
2016.01.04          
2016.01.04          
2016.01.04          
2016.01.04  100 13  87
2016.01.11  100 13  87
2016.01.11  100 13  87
2016.01.11  100 13  87
2016.01.11  100 13  87
2016.01.11  100 13  87
2016.01.11  100 13  87
2016.01.11  100 13  87
2016.01.11  100 13  87
2016.01.11  100 13  87
2016.01.11  200 23  177

我想要的输出是:

Date     Sum     Sum of Fee      Transit
2016.01.04  100 13  87
2016.01.11  200 23  177

我的 awk 必须经过数百个 input*.txt,我只想提取每个输入文件的所需输出中给出的信息。 AWK:

BEGIN { FS="\t"; OFS="\t";
print "Date \t Sum \t Sum of Fee \t Transit"
}

FNR==1    {flag=0}
{
if ($1~/Date/) {$1=substr($1,6,11); date=$1};
if ($3~/Sum/)  {amount=$4; fee=$5+$6; transit=$7};
}

flag!=0 {print date OFS amount OFS fee OFS transit};
/Report/ {flag=1}

【问题讨论】:

  • 不清楚,请在您的问题中添加更多关于您的请求的详细信息,然后告诉我们。
  • 为什么期望输出的最后两个字段是23 177而不是20 180

标签: awk


【解决方案1】:
awk '
BEGIN {
    FS=OFS="\t"
    print "Date", "Sum", "Sum of Fee", "Transit"
}
sub(/^Date /,"",$1) { date = $1 }
$3=="Sum" { print date, $4, $5+$6, $7 }
' input*.txt
Date    Sum     Sum of Fee      Transit
2016.01.04      100     13      87
2016.01.11      200     20      180

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多