使用shell脚本

时间:2017-07-18 21:37:22

标签: shell

我想创建一个shell脚本文件,使其从.dat或excel .xls文件中获取某些值,然后将这些值传递给另一个文件,如下例所示;

1-.dat值的矩阵大小为32x5;示例

1 3 4 5 6
4 5 7 9 8
:
:
1 1 1 2 4

2-.geo文件包含以下内容

x1= ;
x2= ;
x3= ;
x4= ;
x5= ;

我想为.dat或.xls文件的每一行创建32个geo文件,例如 1.geo;;

x1 = 1;
x2 = 3;
x3 = 4;
x4 = 5;
x5 = 6;

2.geo有第二行等。

总之,shell脚本遍历行并将它们传递给geo文件并使用不同的地理文件名保存。

任何帮助都将不胜感激。

非常感谢,

1 个答案:

答案 0 :(得分:0)

您的练习实际上只是通过将每一行读入单独的变量来处理,例如: $a$b$c$d$e。阅读完毕后,您可以使用$count.geo所需的格式将它们写入单独的1.geo文件(例如2.geoprintf,...)。一个简单的实现是:

#!/bin/sh

dat=${1:-geo.dat}   ## .dat filename ('geo.dat' default)
count=1

test -r "$dat" || { ## validate input file is readable
    printf "error: file not readable '%s'\n" "$dat"
    exit 1
}

while read -r a b c d e; do     ## read each value into a b c d e
    printf "x1 = %d;\nx2 = %d;\nx3 = %d;\nx4 = %d;\nx5 = %d;\n" \
    $a $b $c $d $e >$count.geo
    ((count++))
done <"$dat"

使用awk,你可以使用类似于:

的单线程
awk '{printf "x1 = %d;\nx2 = %d;\nx3 = %d;\nx4 = %d;\nx5 = %d;\n", \
$1, $2, $3, $4, $5 > FNR".geo"}' geo.dat

示例输入文件 geo.dat

$ cat geo.dat
5 9 4 4 2
8 4 3 8 7
5 8 4 3 7
1 3 9 8 2
5 8 2 2 1
7 1 8 3 4
3 7 4 7 2
5 6 6 9 5
3 4 4 8 6
2 9 9 1 7
2 6 5 4 8
5 1 9 4 3
4 6 1 7 5
2 4 1 7 3
6 2 6 1 9
3 3 9 3 4
6 5 9 2 8
8 7 8 8 2
1 2 9 1 1
4 3 5 5 1
8 2 2 5 3
2 7 5 1 1
9 6 5 9 8
4 9 6 2 8
8 3 1 7 4
2 1 6 7 7
7 5 9 9 9
2 3 7 8 3
9 8 1 5 7
9 9 7 6 1
6 4 5 7 2
8 9 3 6 6

使用示例

$ sh readgoedat.sh geo.dat

$ awk '{printf "x1 = %d;\nx2 = %d;\nx3 = %d;\nx4 = %d;\nx5 = %d;\n", \
$1, $2, $3, $4, $5 > FNR".geo"}' geo.dat

示例输出文件

$ cat 1.geo
x1 = 5;
x2 = 9;
x3 = 4;
x4 = 4;
x5 = 2;

$ cat 2.geo
x1 = 8;
x2 = 4;
x3 = 3;
x4 = 8;
x5 = 7;

$ cat 32.geo
x1 = 8;
x2 = 9;
x3 = 3;
x4 = 6;
x5 = 6;

仔细看看,如果您有其他问题,请告诉我。