簡體   English   中英

如何使用 unix shell 腳本將多個 csv 文件組合成一個 excel 表?

[英]How to combine multiple csv files into a single excel sheet using unix shell scripting?

例如,我們有 3 個csv文件1.csv2.csv3.csv 我希望輸出為All.xls

含有

3 個csv文件1.csv2.csv3.csv在各自的選項卡中。

是的,有多種方法可以做你想做的事。 Perl、Python 和 Ruby 都有相應的模塊。 可能還有其他腳本語言。 取決於您熟悉的腳本語言。

這是指向使用 Python 執行所需操作的一種方法的指針: Python script to convert CSV files to Excel

您可以使用這個維護良好的 Perl 腳本:

https://metacpan.org/release/Text-CSV_XS

它存在於大多數 Linux 發行版中(盡管名稱不同):

https://repology.org/project/perl:text-csv-xs/versions

這是語法

csv2xlsx -o ~/All.xlsx 1.csv 2.csv 3.csv

您可以嘗試awk '.a[$0]++'./*.csv >./all.xls此命令將合並當前文件夾中的所有 csv 文件並創建一個新文件:帶有單個標題行的all.xls

只需執行以下操作:

1-打開一個空的 excel 文件,然后轉到file ,然后options ,然后選擇customize Ribbon ,然后選擇developer然后按ok

2-現在您的功能區中顯示了developer點擊,因此您需要做的就是選擇它然后按VisualBasic圖標

3-Microsoft Visual basic for applications 窗口將彈出,選擇insert然后modules

4-將以下代碼粘貼到空窗口中:

Sub CSVtoXLS()
'UpdatebyExtendoffice20170814
    Dim xFd As FileDialog
    Dim xSPath As String
    Dim xCSVFile As String
    Dim xWsheet As String
    Application.DisplayAlerts = False
    Application.StatusBar = True
    xWsheet = ActiveWorkbook.Name
    Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
    xFd.Title = "Select a folder:"
    If xFd.Show = -1 Then
        xSPath = xFd.SelectedItems(1)
    Else
        Exit Sub
    End If
    If Right(xSPath, 1) <> "\" Then xSPath = xSPath + "\"
    xCSVFile = Dir(xSPath & "*.csv")
    Do While xCSVFile <> ""
        Application.StatusBar = "Converting: " & xCSVFile
        Workbooks.Open Filename:=xSPath & xCSVFile
        ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xlsx", vbTextCompare), xlWorkbookDefault
        ActiveWorkbook.Close
        Windows(xWsheet).Activate
        xCSVFile = Dir
    Loop
    Application.StatusBar = False
    Application.DisplayAlerts = True
End Sub

5 按 f5 運行,導航到您的 CSV 文件,然后按ok並等待 VBA 腳本發揮其魔力 = 這會將 CSV 文件轉換為 xlsx

6-現在刪除modules中以前的VBA腳本並添加以下腳本

Sub CSVtoXLS()
'UpdatebyExtendoffice20170814
    Dim xFd As FileDialog
    Dim xSPath As String
    Dim xCSVFile As String
    Dim xWsheet As String
    Application.DisplayAlerts = False
    Application.StatusBar = True
    xWsheet = ActiveWorkbook.Name
    Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
    xFd.Title = "Select a folder:"
    If xFd.Show = -1 Then
        xSPath = xFd.SelectedItems(1)
    Else
        Exit Sub
    End If
    If Right(xSPath, 1) <> "\" Then xSPath = xSPath + "\"
    xCSVFile = Dir(xSPath & "*.csv")
    Do While xCSVFile <> ""
        Application.StatusBar = "Converting: " & xCSVFile
        Workbooks.Open Filename:=xSPath & xCSVFile
        ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xlsx", vbTextCompare), xlWorkbookDefault
        ActiveWorkbook.Close
        Windows(xWsheet).Activate
        xCSVFile = Dir
    Loop
    Application.StatusBar = False
    Application.DisplayAlerts = True
End Sub

7 按 f5 運行,導航到您的文件,然后按ok並等待 VBA 腳本發揮其魔力 = 這會將 xlsx 文件轉換為一個 excel 文件

將文件分類在一起以生成新文件的命令是cat 但是,如果您只是做了一個

 cat *csv >All.xls

您還會在結果文件的中間有標題行。 有兩種方法可以解決此問題:

第一個涉及在將各個部分放在一起之前,從每個缺少標題行的 csv 文件中創建臨時文件。 這可以使用tail命令來完成,例如

tail -n +2 2.csv >2_without_header.csv

第二種可能性可能適用於您的情況,也可能不適用。 如果 - 正如 CSV 文件通常的情況 - 行的順序無關緊要並且可以忽略重復行並且 - 正如你的情況可能 - 標題是相同的,你可以簡單地做一個

sort -u *csv >All.xls

例如,我們有3個csv文件1.csv2.csv3.csv 我希望輸出為All.xls

包含

3個csv文件1.csv2.csv3.csv

你可以幫幫我嗎? 先感謝您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM