使用 bash 清理数据格式

Using bash to clean up data formatting

我是 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

但我正在为如何修改每个 'piece' 数据的部分而苦苦挣扎(在某种意义上,通过使用“|”作为分隔符来索引每个部分)。

最好是用 C 写一个程序,将每个数据块设置为一个数组然后使用它,还是使用 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 作为最终输出文件。

文件内容如下:

input.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|

希望这能满足您的要求:)