
大きな "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
答え2
変更:
if [[ "$col6" = '0' ]]
到着
if [[ "$col6" == "0" ]]
メモリの問題を取り除きます。