比如我有一个200行6列的文本文件,需要对每行每列的数据进行操作,之后再写入到另一个文件中。问题是怎样取出数据呢(先对第一行的每一个数据进行操作,完成之后将结果保存到另一个文本文件中;对第二行数据进行同样的操作。)?如果是C\C++语言就比较容易,shell刚刚接触,不会呢。先谢谢大家了。
好的。文本流格式是:
1.1 0xD8130000 0x0 0x3 0x0 0x0
1.2 0xD8130000 0x4 0x7 0x0 0x0
上面这样的。
操作如下:
1、第一行,取出每一列的数据,有六个,分别赋值给六个变量,这六个变量与相应寄存器在内存中的数据进行对比,是否可读可写,比较之后将测试结果输出到另一个文本文件中,作为一行。
2、第一行处理完毕,接着第二行处理,方式与1是一样的。
shell无法直接操作内存,”与相应寄存器在内存中的数据进行对比并输出测试结果“,这个只能通过调用外部工具来实现。
data[$i]=`echo "$line" | awk -v a=$i '{print $a}'`
这行是打印每一列的数据,能够操作她吗?我尝试了只有源文件,将14、15行
注释掉,运行这个脚本,显示能够将文本中的数据全部这样输出,如果ret=${ret:1} #Remove the 1st space不注释掉,则只有第一行的数据打印处理如下: 因为 ret 这个变量根本没赋值啊。ret=${ret:1} 这句是对ret字符串做处理,如果字符串为空,是会出错的。需要先在循环里赋值,后面才能使用。
另外,not found是哪里来的?我没打印这些东西啊
嗯,明白了。关于not found,我也不知道怎么回事,输出就是这样的。也不知道是什么错误。
非常感谢您的解答啊,得好好的补补shell编程知识,呵呵。
对了,你用的是什么shell?
我试过,ret为空也不应该报错,有些shell如Ubuntu默认带的dash不支持数组,会报 Bad substitution 之类的错误。
将dash改为bash,参见我在下面这个问题的回答:http://zhidao.baidu.com/question/563952737?&oldq=1#answer-1414268701