我有多個CSV文件。我需要從他們刪除列5和6。例如file.csv
:我需要從幾百個文件中刪除第5和6列
column1,column2,column3,mm/dd/yyyy,column5,column6,column7,...,column52
我已經搜索並沒有什麼似乎是理所應當的那樣簡單。我希望有一個sed
解決方案,以便它將更新每個文件。我不會重命名這些文件,它們將保持不變,除了剪切文件現在不會被刪除。
我有多個CSV文件。我需要從他們刪除列5和6。例如file.csv
:我需要從幾百個文件中刪除第5和6列
column1,column2,column3,mm/dd/yyyy,column5,column6,column7,...,column52
我已經搜索並沒有什麼似乎是理所應當的那樣簡單。我希望有一個sed
解決方案,以便它將更新每個文件。我不會重命名這些文件,它們將保持不變,除了剪切文件現在不會被刪除。
你可以在一個循環中使用cut
,假設你所有的文件至少有7列:
for file in *.csv; do
cut -f1-4,7- -d, "$file" > "$file".reduced
# move reduced file to original once tested
# mv "$file".reduced "$file"
done
-f1-4,7-
=>獲得字段1-4,然後7起(基本上,除去5 & 6)我已經很快測試了切割和移動。它似乎工作。我會在接受你的回答之前進一步測試。謝謝。 –
爲了重新命名我打算使用的多個文件: 'for i in * .csv.reduced do j ='echo $ i | sed「s/.reduced //」 mv $ i $ j done' –
隨着GNU sed的:
sed 's/,[^,]*//4;s/,[^,]*//4' file
添加-i
標誌編輯一個文件:
sed -i 's/,[^,]*//4;s/,[^,]*//4' file
或更短:
sed 's/\([^,]*,\)\{2\}//3' file
perl -p -i -e '{if(/(.*),(.*),(.*),(.*),.*,.*,(.*)/) {print "$1,$2,$3,$4,$5\n"}}' file.csv
這將直接除去5和第6之後的文件更新列。
是否引用了任何字段?像這樣:'column3,「column4,字段」,column5「中的逗號。 (這只是3個字段,但任何微不足道的正則表達式解決方案將打破4並打破引用的字段。)字段之間的逗號之後的列之間是否有空格? CSV非常複雜... – dawg
逗號之間沒有空格。沒有引號,但某些字段中有空格。以及時間戳中的日期字段和冒號的斜槓。 –
然後請修復您的示例。謝謝 – dawg