シェルスクリプトでRAMが枯渇している理由がわかりません。

シェルスクリプトでRAMが枯渇している理由がわかりません。

大きな "csv" ファイル(約 4.5 GB)があるため必要ないため、一部の列を削除する必要があります。私は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

おすすめ記事