[英]How to compare two columns in two different csv files using shell scripting?
[英]How to combine multiple csv files into a single excel sheet using unix shell scripting?
例如,我們有 3 個csv
文件1.csv
、 2.csv
、 3.csv
。 我希望輸出為All.xls
含有
3 個csv
文件1.csv
、 2.csv
和3.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.csv
, 2.csv
和3.csv
。 我希望輸出為All.xls
包含
3個csv
文件1.csv
, 2.csv
和3.csv
。
你可以幫幫我嗎? 先感謝您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.