【发布时间】:2021-01-15 06:41:16
【问题描述】:
我正在处理位于 workdir 中的大量 dlg 文本文件的分析。每个文件都有一个表格(通常位于日志的不同位置),格式如下:
文件 1:
CLUSTERING HISTOGRAM
____________________
________________________________________________________________________________
| | | | |
Clus | Lowest | Run | Mean | Num | Histogram
-ter | Binding | | Binding | in |
Rank | Energy | | Energy | Clus| 5 10 15 20 25 30 35
_____|___________|_____|___________|_____|____:____|____:____|____:____|____:___
1 | -5.78 | 11 | -5.78 | 1 |#
2 | -5.53 | 13 | -5.53 | 1 |#
3 | -5.47 | 17 | -5.44 | 2 |##
4 | -5.43 | 20 | -5.43 | 1 |#
5 | -5.26 | 19 | -5.26 | 1 |#
6 | -5.24 | 3 | -5.24 | 1 |#
7 | -5.19 | 4 | -5.19 | 1 |#
8 | -5.14 | 16 | -5.14 | 1 |#
9 | -5.11 | 9 | -5.11 | 1 |#
10 | -5.07 | 1 | -5.07 | 1 |#
11 | -5.05 | 14 | -5.05 | 1 |#
12 | -4.99 | 12 | -4.99 | 1 |#
13 | -4.95 | 8 | -4.95 | 1 |#
14 | -4.93 | 2 | -4.93 | 1 |#
15 | -4.90 | 10 | -4.90 | 1 |#
16 | -4.83 | 15 | -4.83 | 1 |#
17 | -4.82 | 6 | -4.82 | 1 |#
18 | -4.43 | 5 | -4.43 | 1 |#
19 | -4.26 | 7 | -4.26 | 1 |#
_____|___________|_____|___________|_____|______________________________________
目的是遍历所有 dlg 文件并从对应于更广泛集群的表中获取单行(直方图列中的斜线数量更多)。在上面的表格示例中,这是第三行。
3 | -5.47 | 17 | -5.44 | 2 |##
然后我需要将此行与日志文件的名称(应在该行之前指定)一起添加到 final_log.txt 中。所以最后我应该有以下格式的东西(3个不同的日志文件):
"Name of the file 1": 3 | -5.47 | 17 | -5.44 | 2 |##
"Name_of_the_file_2": 1 | -5.99 | 13 | -5.98 | 16 |################
"Name_of_the_file_3": 2 | -4.78 | 19 | -4.44 | 3 |###
我的 BASH 工作流程的一个可能模型是:
#!/bin/bash
do
file_name2=$(basename "$f")
file_name="${file_name2/.dlg}"
echo "Processing of $f..."
# take a name of the file and save it in the log
echo "$file_name" >> $PWD/final_results.log
# search of the beginning of the table inside of each file and save it after its name
cat $f |grep 'CLUSTERING HISTOGRAM' >> $PWD/final_results.log
# check whether it works
gedit $PWD/final_results.log
done
这里我需要替换 echo 和 grep 的组合以获取表格的选定部分。
【问题讨论】:
-
如果出现平局,应该收集哪一行?
-
您的意思是示例嵌入在更大的文件中吗?输入文件中可以有多个这些片段吗?我们如何区分这些行和应该忽略的行?
-
对!排名表位于日志文件中的某处,因此行号可能不同;-) 以下格式只有一个表。为简单起见,我们可以尝试处理示例工作流,例如从表中获取第一行 ;-))
-
我回滚了您的编辑。在您收到原始问题的多个答案后,请不要移动目标帖子。如果您仍然无法解决问题,(可能接受您在此处获得的答案之一,并且)发布一个新问题,其中包含实际的代表性数据和 minimal reproducible example。
-
这显然是现在的后续问题:stackoverflow.com/questions/64140486/…
标签: bash loops logging awk sed