2017-02-09 58 views
-3

我有多個CSV文件。我需要從他們刪除列5和6。例如file.csv我需要從幾百個文件中刪除第5和6列

column1,column2,column3,mm/dd/yyyy,column5,column6,column7,...,column52 

我已經搜索並沒有什麼似乎是理所應當的那樣簡單。我希望有一個sed解決方案,以便它將更新每個文件。我不會重命名這些文件,它們將保持不變,除了剪切文件現在不會被刪除。

+0

是否引用了任何字段?像這樣:'column3,「column4,字段」,column5「中的逗號。 (這只是3個字段,但任何微不足道的正則表達式解決方案將打破4並打破引用的字段。)字段之間的逗號之後的列之間是否有空格? CSV非常複雜... – dawg

+0

逗號之間沒有空格。沒有引號,但某些字段中有空格。以及時間戳中的日期字段和冒號的斜槓。 –

+1

然後請修復您的示例。謝謝 – dawg

回答

3

你可以在一個循環中使用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)
+1

我已經很快測試了切割和移動。它似乎工作。我會在接受你的回答之前進一步測試。謝謝。 –

+0

爲了重新命名我打算使用的多個文件: 'for i in * .csv.reduced do j ='echo $ i | sed「s/.reduced //」 mv $ i $ j done' –

1

隨着GNU sed的:

sed 's/,[^,]*//4;s/,[^,]*//4' file 

添加-i標誌編輯一個文件:

sed -i 's/,[^,]*//4;s/,[^,]*//4' file 

或更短:

sed 's/\([^,]*,\)\{2\}//3' file 
0
perl -p -i -e '{if(/(.*),(.*),(.*),(.*),.*,.*,(.*)/) {print "$1,$2,$3,$4,$5\n"}}' file.csv 

這將直接除去5和第6之後的文件更新列。

相關問題