我有多个文件具有相同的结构但不是相同的数据。名称是20140101.log,20140102.log,...这些文件中的每一个都包含在最后一行:
**# observed meteors : 60**
Perseids (PER) : #=54 b=-1.0 mag ECA=1608.3 km^2*h FLX=33.6 /(10^3*km^2*h)
Sporadics (SPO) : #=3 b=-0.8 mag ECA=171.6 km^2*h FLX=17.5 /(10^3*km^2*h)
S-delta-Aquarids (SDA) : #=2 b=-0.7 mag ECA=69.3 km^2*h FLX=28.9 /(10^3*km^2*h)
kappa-Cygnids (KCG) : #=1 b=-1.2 mag ECA=369.8 km^2*h FLX=2.7 /(10^3*km^2*h)
从这些文件中的每一个我想提取所有行,然后将“#observed meteors:”行提取到另一个文件。另外,我想附加从文件名中获取的每个行数据。所以目标文件应该只包含这样的行:
20140101 Perseids (PER) : #=54 b=-1.0 mag ECA=1608.3 km^2*h FLX=33.6 /(10^3*km^2*h)
20140101 Sporadics (SPO) : #=3 b=-0.8 mag ECA=171.6 km^2*h FLX=17.5 /(10^3*km^2*h)
进一步迈进。我的脚本中有2个变量:
$katalog=pav13 and $katalog_daty=20140101.
我想得的是这样的一行:
pav13 20140101 Perseids (PER) : #=54 b=-1.0 mag ECA=1608.3 km^2*h FLX=33.6 /(10^3*km^2*h)
使用
awk '/^# observed meteors/{s=1;i=1;next} i{print '$katalog_daty', $0;next}' 20140101.log
给出
20140101 Perseids (PER) : #=54 b=-1.0 mag ECA=1608.3 km^2*h FLX=33.6 /(10^3*km^2*h)
但我无法找到如何将$katalog
包含在行首。这不起作用
awk '/^# observed meteors/{s=1;i=1;next} i{print '$katalog' '$katalog_daty', $0;next}' 20140101.log
答案 0 :(得分:0)
使用awk你可以这样做:
awk '/^# observed meteors/{s=1;i=1;next} i{print FILENAME, $0;next}' 20140101
20140101 Perseids (PER) : #=54 b=-1.0 mag ECA=1608.3 km^2*h FLX=33.6 /(10^3*km^2*h)
20140101 Sporadics (SPO) : #=3 b=-0.8 mag ECA=171.6 km^2*h FLX=17.5 /(10^3*km^2*h)
20140101 S-delta-Aquarids (SDA) : #=2 b=-0.7 mag ECA=69.3 km^2*h FLX=28.9 /(10^3*km^2*h)
20140101 kappa-Cygnids (KCG) : #=1 b=-1.2 mag ECA=369.8 km^2*h FLX=2.7 /(10^3*km^2*h)
20140101 Antihelion (ANT) : #=0 b=--- mag ECA=164.1 km^2*h FLX=0.0 /(10^3*km^2*h)
20140101 alpha-Capricornids (CAP) : #=0 b=--- mag ECA=572.8 km^2*h FLX=0.0 /(10^3*km^2*h)
UPDATE:要从shelL传递变量到awk;
awk -v katalog="$katalog" -v katalog_daty="$katalog_daty" '/^# observed meteors/{
s=1;i=1;next} i{print katalog, katalog_daty, $0; next}' 20140101.log