Bash相当于Matlab的`fscanf`

时间:2014-07-08 08:00:23

标签: bash matlab

我有很多文本文件,其中包含数值列(每个文件的列数不同)。我使用MATLAB来存储每个人的内容:

id1 = fopen('texfile.txt','r');
A = fscanf(id1,'%f',[1 Inf]);
fclose(id1);

我想知道如果bash脚本中有任何简单的方法可以为我做同样的事情吗?

2 个答案:

答案 0 :(得分:0)

Bash中fscanf的简单等效内容是read内置:

read -r A

另一方面,如果我们有多列值,那么可以使用awk来提取n列:

awk '{print $n}' < input > output

答案 1 :(得分:0)

不是可以想象的最简单的方法,但你可以使用Bash数组(Bash 4及以上)。

首先,使用换行符作为分隔符读取文件:

IFS_prev="$IFS"; IFS=$'\n'; 
    A=($(cat "textfile.txt"))
IFS="$IFS_prev"

然后,要引用j th 行中的i th 元素,请使用:

row=(${A[i]})     # extract ith row and split on spaces
element=${row[j]} # extract jth element
相关问题