我是bash脚本新手,需要一些我正在处理的项目的帮助。我正在尝试使用bash shell脚本编辑.txt文件,将数据库中的数据转换为更有用的格式。
数据目前采用以下格式(该文件包含数千个这样的数据):
DATA:| 11.00000 | 000563784644 | 7031450 | 7031450 || 1.000000 | 1.000000 | 0.000000 | 0.000000 | 0.000000 | 21.000000 | 47.040000 | 60.480000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.000000 | 100.000000
我想删除" DATA:"来自文件中每个数据的前缀,添加适当的日期信息,并将数据的一部分重新格式化为以下最终格式:
2017/01/27 | 0011 | 000563784644 | 7031450 | 7031450 || 1 | 1 | 0 | 0.00 | 0.00 | 21 | 47.04 | 60.48 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 1 | 100 < / p>
我已经想出如何迭代文件中的每一段数据,如下所示:
while read p; do
...
done <peptides.txt
但是我正在努力修改每个部分的部分&#39;数据(在某种意义上,通过使用&#39; |&#34;作为分隔符来索引每个部分)。
最好用C编写程序将每个数据块设置为数组,然后使用它,或使用bash命令编辑数据字符串?
答案 0 :(得分:2)
您可以使用以下脚本来达到您的要求
public class UserManager<TUser> : IDisposable where TUser : class
我测试了脚本并使用public virtual Task<TUser> FindByIdAsync(string userId);
作为输入文件,并根据您的要求使用TUser
作为最终输出文件。
文件内容如下:
TUser<TKey>
while read line ; do
for i in `echo $line |sed "s/||/|empty|/g" | tr '|' '\n'`; do if [[ $i =~ [0-9] ]];then printf "%.2f\n" $i ; else printf "$i\n"; fi ; done | tr '\n' '|' | sed "s/\.00//g" | sed "s/DATA:/$(date +%F)/g" | tr '-' '\/' | sed "s/|empty|/||/g"; printf "\n"
done < input.txt > output.txt
input.txt
output.txt
希望这将满足您的要求:)