我是 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
我已经想出如何像这样遍历文件中的每条数据:
while read p; do
...
done <peptides.txt
但我正在努力解决如何修改每个“片段”数据的部分(从某种意义上说,通过使用“|”作为分隔符来索引每个部分)。
最好是用 C 编写一个程序,将每个数据 block 设置为一个数组然后使用它,还是使用 bash 命令编辑数据字符串?
最佳答案
您可以使用下面的脚本来实现您的需求
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
作为最终输出文件。
文件内容如下:
输入.txt
cat input.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:|31.00000|0005784644|7031450|73333450||1.0340000|1.000000|0.03000|0.000000|0.020000|21.000000|47.040000|60.480000|0.000000|0.000000|0.000000|0.000000|0.000000|0.000000|1.000000|100.000000
DATA:|11.00000|000563784644|7031450|7031450||1.000000|1.000000|0.000000|0.000000|0.200000|21.000000|47.040000|60.480000|0.000000|0.000000|0.000000|0.000000|0.000000|0.000000|1.000000|100.000000
DATA:|11.00200|000563784644|7031450|7031420||1.010000|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.001000
output.txt
cat output.txt
2018/03/17|11|563784644|7031450|7031450||1|1|0|0|0|21|47.04|60.48|0|0|0|0|0|0|1|100|
2018/03/17|31|5784644|7031450|73333450||1.03|1|0.03|0|0.02|21|47.04|60.48|0|0|0|0|0|0|1|100|
2018/03/17|11|563784644|7031450|7031450||1|1|0|0|0.20|21|47.04|60.48|0|0|0|0|0|0|1|100|
2018/03/17|11|563784644|7031450|7031420||1.01|1|0|0|0|21|47.04|60.48|0|0|0|0|0|0|1|100|
希望这能满足您的要求:)
关于c - 使用 bash 清理数据格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49326677/