我的文件夹结构如下:
$ 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
命令是可选的,以产生良好的输出。