RAM 在 shell 脚本中耗尽,我不明白为什么

RAM 在 shell 脚本中耗尽,我不明白为什么

我有一个很大的“csv”文件(大约 4.5GB),我需要删除一些列,因为我不需要它们。对于 bash,我是一个完全的初学者,所以我可能做了一些根本性错误的事情,但我的脚本耗尽了我计算机上的所有 RAM,直到它变得无法使用。

#!/bin/bash

while IFS="," read -r col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 
do
   if [[ "$col6" = '0'  ]]
   then 
       continue 
   else
       echo "$col1, $col2, $col6,"$'\r' >> cleaned.csv
   fi 
done < data.csv 

我不太确定为什么 RAM 会在这里增长,因为我不知道我在哪里将一些东西保存到内存中,这些东西可能会变成 10+GB 大...另外,如果我将上面的代码更改为

#!/bin/bash

while IFS="," read -r col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 
do
   echo "$col1, $col2, $col6,"$'\r' >> cleaned.csv
done < data.csv 

一切都很顺利...


编辑: “csv”文件示例:

username,id,my_watched_episodes,my_start_date,my_finish_date,my_score,my_status,my_rewatching,my_rewatching_ep,my_last_updated,my_tags
karthiga,21,586,0000-00-00,0000-00-00,9,1,,0,1362307973,
karthiga,59,26,0000-00-00,0000-00-00,7,2,,0,1362923691,
karthiga,74,26,0000-00-00,0000-00-00,7,2,,0,1367081015,
karthiga,120,26,0000-00-00,0000-00-00,7,2,,0,1362308037,
karthiga,178,26,0000-00-00,0000-00-00,7,2,0,0,1364399953,
karthiga,210,161,0000-00-00,0000-00-00,7,2,,0,1362923826,
karthiga,232,70,0000-00-00,0000-00-00,6,2,,0,1362849882,
karthiga,233,78,0000-00-00,0000-00-00,6,2,,0,1362893384,
karthiga,249,167,0000-00-00,0000-00-00,8,2,,0,1363709086,
karthiga,269,366,0000-00-00,0000-00-00,10,2,,0,1362303563,

答案1

您似乎正在处理 CSV,使得没有字段包含逗号。假设这个文件可以接受,您可以awk直接使用

awk -F, 'BEGIN { OFS=FS } !$6 { print $1, $2, $6 }' data.csv > cleaned.csv

如果您确实需要\r作为行终止符(而不是\n),请使用它

awk -F, '!$6 { printf "%s,%s,%s\r", $1, $2, $6 }' data.csv > cleaned.csv

答案2

改变:

if [[ "$col6" = '0' ]]

if [[ "$col6" == "0" ]]

以消除内存问题。

相关内容