刪除不同長度的陣列列

刪除不同長度的陣列列

我想刪除一個沒有固定大小的陣列 例如。

file.csv

001,"Geography",TRUE,"{1,0,1,1}",1,"CHARLIE"
002,"History",FALSE,"{0,0,1,1}",0,"DAVID"
003,"Mathematics",TRUE,"{1,1,1,1}",1,"SAM"

以下數組應轉換為以下格式

file_edited.csv

001,"Geography",TRUE,1,"CHARLIE"
002,"History",FALSE,0,"DAVID"
003,"Mathematics",TRUE,1,"SAM"

如何在命令列中執行此操作。

答案1

我確信有很多不同的方法可以實現這一點,我更喜歡sed

sed 's/"{.*}",//'

GNU/Linux(GNU sed),使用:

sed 's/"{.*}",//' csv
001,"Geography",TRUE,1,"CHARLIE"
002,"History",FALSE,0,"DAVID"
003,"Mathematics",TRUE,1,"SAM"

作業系統(BSD sed,注意-E標誌):

sed -E 's/"{.*}",//' csv 
001,"Geography",TRUE,1,"CHARLIE"
002,"History",FALSE,0,"DAVID"
003,"Mathematics",TRUE,1,"SAM"

答案2

使用 Python 及其 CSV 模組,例如以下單一命令:

python -c 'import sys,csv
w = csv.writer(sys.stdout, quoting=csv.QUOTE_NONNUMERIC)
for row in csv.reader(sys.stdin):
    del row[3]
    w.writerow(row)' < file.csv > file_edited.csv

神奇的事情發生在命令的倒數第二行。在Python中,陣列從索引0開始,row[3]第四列也是如此;因此,這只是刪除每筆記錄的第四列。

或者,您可以簡單地列印第 0、1、2、4 和 5 列,使用

python -c 'import sys,csv
w = csv.writer(sys.stdout, quoting=csv.QUOTE_NONNUMERIC)
for row in csv.reader(sys.stdin):
    w.writerow([row[0], row[1], row[2], row[4], row[5]])' < file.csv > file_edited.csv

相關內容