![](/img/trans.png)
[英]Search for specific text in log files, then merge all the contents of the log files into one file
[英]Extract text from log files and merge it together
我需要編寫一些簡單的腳本來分析大量的日志文件,使用grep或awk的組合從每個日志中提取一行(指定的)並將其附加到一些result.log中,並帶有來自該行已被提取。 每個日志文件的樣子:
Detected 8 CPUs
Reading input ... done.
Setting up the scoring function ... done.
mode | affinity | dist from best mode
| (kcal/mol) | rmsd l.b.| rmsd u.b.
-----+------------+----------+----------
1 -6.8 0.000 0.000
2 -6.4 8.197 10.006
3 -5.9 1.227 2.791
4 -5.6 1.551 3.947
5 -5.2 1.061 3.325
6 -5.1 1.055 4.219
7 -4.4 2.000 3.318
8 -3.9 1.110 3.362
9 -3.8 1.460 4.123
10 -2.4 6.960 9.282
11 -2.2 1.277 4.038
12 -1.9 1.758 4.043
13 3.1 2.144 4.284
Writing output ... done.
我需要從這個只有前5行提取的組成
1 -6.8 0.000 0.000
2 -6.4 8.197 10.006
3 -5.9 1.227 2.791
4 -5.6 1.551 3.947
5 -5.2 1.061 3.325
並將其附加到result.log,看起來像這樣:
From file name1.log
1 -6.8 0.000 0.000
2 -6.4 8.197 10.006
3 -5.9 1.227 2.791
4 -5.6 1.551 3.947
5 -5.2 1.061 3.325
From file name2.log
1 -6.8 0.000 0.000
2 -6.4 8.197 10.006
3 -5.9 1.227 2.791
4 -5.6 1.551 3.947
5 -5.2 1.061 3.325
所以對於N個日志,我應該有5N個這樣的行或N個塊,由result.log中的5個排名得分組成
腳本循環所有日志的想法=
#!/bin/bash
for log in ./*.log2; do
filename=$(basename "$log")
filenamenoextention=${filename/.log/}
#some command to extract of the line and put it to the final_results.txt
done
因此,我只需要知道grep或sed(從每個日志中查找5行)和(mb)awk的組合即可提取選定的(例如僅1和2)列
感謝幫助,
詹姆士
如果要提取的日志文件行始終相同,則可以執行以下操作:
#!/bin/bash
for log in ./*.log2; do
echo "From $log" >> result.log
head -n 12 "$log"|tail -n 5 >> result.log
done
從Ed Morton的奇妙答案中,我們得到:
awk 'c&&c--;/^-----+/{print "From file "FILENAME; c=5}' name1.log name2.log ... > result.log
如果在輸入行上需要額外的前導縮進,則可以更改第一個模式,如下所示:
c&&c--{printf " ";print};
如果標題中的行數可能不相同,則也可以使用下一個:
grep -A5 -He '^----' *.log2 |
sed -E 's/(.*)\.log2:-{5}.*/From file \1/;s/^[^-]+-//;/^--$/d' >result.log
打印:
From file c1
1 -6.8 0.000 0.000
2 -6.4 8.197 10.006
3 -5.9 1.227 2.791
4 -5.6 1.551 3.947
5 -5.2 1.061 3.325
From file d
1 -6.8 0.000 0.000
2 -6.4 8.197 10.006
3 -5.9 1.227 2.791
4 -5.6 1.551 3.947
5 -5.2 1.061 3.325
From file e
1 -6.8 0.000 0.000
2 -6.4 8.197 10.006
3 -5.9 1.227 2.791
4 -5.6 1.551 3.947
5 -5.2 1.061 3.325
您的基本命令可能是:
grep -A5 -He '^----' *.log2
以以下形式打印所需信息的內容:
c1.log2:-----+------------+----------+----------
c1.log2- 1 -6.8 0.000 0.000
c1.log2- 2 -6.4 8.197 10.006
c1.log2- 3 -5.9 1.227 2.791
c1.log2- 4 -5.6 1.551 3.947
c1.log2- 5 -5.2 1.061 3.325
--
d.log2:-----+------------+----------+----------
d.log2- 1 -6.8 0.000 0.000
d.log2- 2 -6.4 8.197 10.006
d.log2- 3 -5.9 1.227 2.791
d.log2- 4 -5.6 1.551 3.947
d.log2- 5 -5.2 1.061 3.325
--
e.log2:-----+------------+----------+----------
e.log2- 1 -6.8 0.000 0.000
e.log2- 2 -6.4 8.197 10.006
e.log2- 3 -5.9 1.227 2.791
e.log2- 4 -5.6 1.551 3.947
e.log2- 5 -5.2 1.061 3.325
例如,在哪里
--
分隔 -----+------------+----------+----------
分隔 通過這種格式,您可以執行將其管道傳輸到awk
, perl
, sed
等等的任何操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.