고정된 크기가 없는 배열을 삭제하고 싶습니다. 예를 들어
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/리눅스(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