Как получить конкретное значение столбца для конкретного значения строки в AWK?

Структура моей папки выглядит следующим образом:

$ tree
.
├── Original_folder
│   └── cat.txt
├── folderCD
│   └── cat.txt
├── folderGK
│   └── cat.txt
├── folderFE
    └── cat.txt

Мой файл cat.text выглядит следующим образом

Version LRv1.10.0
Build date 2017-12-06
MOL-calc
PRESSURE
!                       
      Time[s]     InletT[K]   InletP[Pa]   O2_GasOut     C_GasOut
       100         0.001885   1070000       0.0007       0.2111  
       200         0.050885   1005000       0.0056       0.2171
       50          0.010885   1200000       0.0855       0.2411
and so on....

Как извлечь значение столбца с ключевым словом в заголовке столбца "_GasOut" для Время [с] = 200? Как извлечь те же данные из всех этих файлов cat.txt и создать новый текстовый файл, как этот .....

Folder       Time[s]     O2_GasOut     C_GasOut 
Original_folder 200        0.0007       0.2111
FolderCD      200        0.0007       0.2111  
FolderGK      200        0.0056       0.2171
FolderFE      200        0.0855       0.2411

До сих пор я пытался получить столбец с заголовком "_GasOut".

gawk -F   

Но это не печать столбцов f. И я не знаю, как действовать дальше. Я хотел иметь новый файл (желаемый выходной текстовый файл), чтобы я мог построить все столбцы на отдельных графиках вместе с именами папок по оси X. Я добавил один из файлов cat.txt для справки. https://1drv.ms/t/s!Aoomvi55MLAQh1wMmpnPGnliFmgg

\t' ' /_GasOut/{ for(f=1;f<=NF;f++){ # $a ~ "B" matches if string B is part of field $a # only these elements are taken to array colhdr if ($f ~ "_GasOut") colhdr[f]=$f print $f } }

Но это не печать столбцов f. И я не знаю, как действовать дальше. Я хотел иметь новый файл (желаемый выходной текстовый файл), чтобы я мог построить все столбцы на отдельных графиках вместе с именами папок по оси X. Я добавил один из файлов cat.txt для справки. https://1drv.ms/t/s!Aoomvi55MLAQh1wMmpnPGnliFmgg

2
задан 7 June 2019 в 17:02

1 ответ

Попробуйте,

awk '
    FNR==6 { for (n=1;n<=NF;n++) { if ($n ~ /_GasOut$/) cols[$n]=n; } }
    NR==6 {
        # print header
        printf "Folder Time[s]"
        for (c in cols) {
            printf " "c
        }
        printf "\n"
    }
    $1==200 {
        # extract foldername
        match(FILENAME, /^[^/]*/, folder);
        # print columns
        printf folder[0]" "$1
        for (c in cols) {
            printf " "$cols[c]
        }
        printf "\n"
    }
' */cat.txt | column -t -s' '

Вывод:

Folder           Time[s]  O2_GasOut  C_GasOut
folderCD         200      0.0056     0.2171
folderFE         200      0.0056     0.2171
folderGK         200      0.0056     0.2171
Original_folder  200      0.0056     0.2171

(я просто помещаю один и тот же файл во все папки, поэтому X_GasOut одинаков для каждой строки)

column необязательна, чтобы сделать хороший вывод.

1
ответ дан 7 June 2019 в 17:02

Другие вопросы по тегам:

Похожие вопросы: