выход из нескольких входов, и выход будет разделен на отдельные имена - PullRequest
0 голосов
/ 09 октября 2019

Я попытался вывести из нескольких входов, и выход будет разделен на отдельные имена в соответствии с входной переменной.

Из этого ввода

==> input_A.txt <==</p>

model
                 61096525  3380677 9639              
                 61096526  3382521 9634              
                 61096527  3384122 9651              
                 61096528  3384250 9675              
                 61096529  3384313 9706              

==> input_B.txt <== </p>

model
                 10911991  396855811255              
                 10911992  396928611344              
                 10911993  396943311341              
                 10911994  397088711443              
                 10911995  397208211507

Будет экспортировано в отдельный файл input_B.txt = schema и input_A.txt = lst

==> output / input_A.lst <== </p>

Column 1 Column 2 Column 3 
A   6109.00   6525.00
A   6109.00   6526.00
A   6109.00   6527.00
A   6109.00   6528.00
A   6109.00   6529.00

==> output / input_B.schema <== </p>

Column 1 Column 2 Column 3 
B   1091.00   1991.00
B   1091.00   1992.00
B   1091.00   1993.00
B   1091.00   1994.00
B   1091.00   1995.00

Итак, я последовалскрипт .

#!/bin/awk -f
FNR==1{
    sub(/.txt/,"",FILENAME)
    lst="output/"FILENAME".lst"
    schema="output/"FILENAME".schema"
    print "Column 1 Column 2 Column 3 " > (lst)
    print "Column 1 Column 2 Column 3 " > (schema)
}
/^                 [6-9]/{
    Name=substr($0,18,4)
    No=substr($0,22,4)
    printf ("A%10.2f%10.2f\n",Name,No) > (lst)
}
/^                 [1-4]/{
    Name=substr($0,18,4)
    No=substr($0,22,4)
    printf ("B%10.2f%10.2f\n",Name,No)> (schema)
}

Почти успешно, мне нужен ваш совет. Мне нужно пропустить эти непревзойденные поля из вывода, как это.

script.awk *txt

head output/*
==> output/input_A.lst <==
Column 1 Column 2 Column 3 
A   6109.00   6525.00
A   6109.00   6526.00
A   6109.00   6527.00
A   6109.00   6528.00
A   6109.00   6529.00

==> output/input_A.schema <== This one should not being output
Column 1 Column 2 Column 3 

==> output/input_B.lst <== also this one should not being output, due I'm printing it at the FNR
Column 1 Column 2 Column 3 

==> output/input_B.schema <==
Column 1 Column 2 Column 3 
B   1091.00   1991.00
B   1091.00   1992.00
B   1091.00   1993.00
B   1091.00   1994.00
B   1091.00   1995.00

1 Ответ

1 голос
/ 09 октября 2019

Не могли бы вы попробовать следующее. Это должно гарантировать, что по крайней мере 1 строка входит в выходной файл (ы), а не только заголовок. Если у файла нет совпадений, то при этом НЕ будет создан пустой файл с только заголовками.

#!/bin/awk -f
FNR==1{
    sub(/.txt/,"",FILENAME)
    lst="output/"FILENAME".lst"
    schema="output/"FILENAME".schema"
    count=count1=""        
}
/^                 [6-9]/{
    if(++count==1){
       print "Column 1 Column 2 Column 3 " > (lst)
    }
    Name=substr($0,18,4)
    No=substr($0,22,4)
    printf ("A%10.2f%10.2f\n",Name,No) > (lst)
}
/^                 [1-4]/{
    if(++count1==1){
       print "Column 1 Column 2 Column 3 " > (schema)
    }
    Name=substr($0,18,4)
    No=substr($0,22,4)
    printf ("B%10.2f%10.2f\n",Name,No)> (schema)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...