如何在 AWK 中获取特定行值的特定列值?

如何在 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”且 Time[s]=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  $'\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

答案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命令是可选的,以产生良好的输出。

相关内容