shell脚本,用于读取所有文件的特定内容并写入新闻文件

时间:2017-10-28 06:52:22

标签: bash shell

我在父目录中有一个扩展名为* sac的文件,这些文件包含地震波形表头信息。我想在一个文件中打印所有文件的特定标题信息。 这就是我到目前为止所做的。

#!/bin/bash
file=map
for i in ./*sac

do

SLA=`saclhdr -STLA $i`

SLO=`saclhdr -STLO $i`

ELA=`saclhdr -EVLA $i`

ELO=`saclhdr -EVLO $i`

echo "MAP GREAT CIRCLE RAY PATHS USING PROJECT">file ; 

echo "$SLA $SLO " >>file;

echo "$ELA $ELO " >>file;

echo "PLOT EPICENTER LOCATIONS" >>$file;

echo "$ELA $ELO " >>file;

echo "PLOT STATION LOCATIONS">>$file ;

echo "$SLA $SLO " >>file;

done

输出结果为:

MAP GREAT CIRCLE RAY PATHS USING PROJECT

-10.4807 105.652 

-7.7592 67.8257 

PLOT EPICENTER LOCATIONS

-7.7592 67.8257 

PLOT STATION LOCATIONS

-10.4807 105.652

这里我得到一个文件的打印信息,我要打印所有文件指定的内容

SLA SLO

ELA ELO 

逐个所有文件

2 个答案:

答案 0 :(得分:1)

你需要这样说:

#!/bin/bash
file=map
echo "MAP GREAT CIRCLE RAY PATHS USING PROJECT" > "$file"
for i in ./*sac
do
  SLA=$(saclhdr -STLA "$i")
  SLO=$(saclhdr -STLO "$i")
  ELA=$(saclhdr -EVLA "$i")
  ELO=$(saclhdr -EVLO "$i")
  echo "$SLA $SLO "
  echo "$ELA $ELO "
done >> "$file"

重定向必须放在for循环体之外,以便连续追加到文件中,而不是在每个回合中重新创建它。

答案 1 :(得分:0)

问题在于这一行。

echo "MAP GREAT CIRCLE RAY PATHS USING PROJECT">file ; 
你正在覆盖内容。使用>>而不是>