bash脚本使用一些附加条件从多个文件复制行

时间:2014-01-06 21:50:27

标签: bash copy lines

我有多个文件具有相同的结构但不是相同的数据。名称是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

1 个答案:

答案 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