【发布时间】:2020-10-23 01:27:33
【问题描述】:
我有一个大小约为 1 GB 的文件,该文件包含以下格式的数据。
A|CD|44123|0|0
B|CD|44124|0|0
C|CD|44125|0|0
D|CD|44126|0|0
E|CD|44127|0|0
F|CD|44128|0|0
J|CD|44129|0|0
I|CD|44130|0|0
在这个文件中,我必须用转换后得到的值替换第三列值。为此我必须打开这个文件,然后读取文件并替换它。这个过程大约需要 5 个小时。下面是我正在使用的代码
cat $FILE_NAME |\
while read REC
do
DATE=`echo "$REC" | cut -d\| -f3`
DATE_NEW=`$UTIL $DATE | head -1 |cut -d" " -f12`
RECORD="$DATE_NEW,"
echo "$RECORD" >> $New_File
done
有什么方法可以让这件事变得更好更快。
所需的输出将是这样的,其中DATE_NEW 值将放置在每个第 3 列 DATE_NEW 值将是我将从中获得的转换值
DATE_NEW=`$UTIL $DATE | head -1 |cut -d" " -f12`
A|CD|10/20/2020|0|0
B|CD|10/25/2020|0|0
C|CD|10/25/2020|0|0
D|CD|10/25/2020|0|0
E|CD|11/15/2020|0|0
F|CD|11/14/2020|0|0
J|CD|11/16/2020|0|0
I|CD|11/17/2020|0|0
@Sundeep 发表评论后,为什么使用 shell 循环处理文本被认为是不好的做法?我在 Perl 中编写了逻辑,在 Perl 中处理时间为 5-7 小时,完成工作需要 99 秒。
【问题讨论】:
-
要替换每条记录的第三列吗?
-
请参阅Why is using a shell loop to process text considered bad practice? 以获取
This process is taking around 5 hours的答案 -
我已经更新了问题的详细信息
-
@Sundeep $UTIL 一个二进制文件,我将运行它以将 44129 儒略日期转换为 dd/mm/yy 格式。
-
根据stackoverflow.com/a/36039098,我得到
02/05/2044for44123..