日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell脚本读取csv_shell script 处理 CSV 文件(Excel)

發布時間:2025/3/19 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell脚本读取csv_shell script 处理 CSV 文件(Excel) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CSV 是一種非常方便的數據交換格式。業務人員可以方便的在 Excel 進行編輯,然后上傳到業務系統中。但是對于 Developer,Excel 略顯笨重,并且編程方便并不那么友好。

本文將介紹一種方式,在 shell script 中處理 CSV 文件。內容涉及:

提取數據行

統計行數

輸出指定列

按列排序

比較兩列數據

其中將使用如下指令:

cat

grep

awk

wc

sort

vimdiff

提取數據行

中國城市近 4 年房產價格:

City,2013,2014,2015,2016

Beijing,22000,30000,35000,38000

Shanghai,20000,25000,30000,35000

Shaanxi-xi'an,6000,5800,5700,6000

Shaanxi-baoji,1000,1200,2000,2000

提取 Shaanxi 價格

cat apartment_prices.csv | grep ^Shaanxi

# output

# Shaanxi-xi'an,6000,5800,5700,6000

# Shaanxi-baoji,1000,1200,2000,2000

提取非 Shaanxi 價格

cat apartment_prices.csv | grep -v ^Shaanxi

# output

# City,2013,2014,2015,2016

# Beijing,22000,30000,35000,38000

# Shanghai,20000,25000,30000,35000

cat 用于輸出 apartment_prices.csv 文件內容,grep 用于按照正則過濾我們需要的文件。

grep ^Shaanxi:提取以 Shaanxi 開頭的數據行,^ 在 Regex 中用于指定行首。

grep -v ^Shaanxi:-v 參數為 --invert-match,提取不滿足 Regex 條件的數據。

統計行數

中國城市近 4 年房產價格:

City,2013,2014,2015,2016

Beijing,22000,30000,35000,38000

Shanghai,20000,25000,30000,35000

Shaanxi-xi'an,6000,5800,5700,6000

Shaanxi-baoji,1000,1200,2000,2000

總數據行:

cat apartment_prices.csv | wc -l

# 5

wc -l:wc(Word Count) 用于行數,字數等數據統計,-l 代表按行數統計。

數據行數(沒有header):

cat apartment_prices.csv | tail -n +2

# Beijing,22000,30000,35000,38000

# Shanghai,20000,25000,30000,35000

# Shaanxi-xi'an,6000,5800,5700,6000

# Shaanxi-baoji,1000,1200,2000,2000

cat apartment_prices.csv | tail -n +2 | wc -l

# 4

tail -n +2: tail 用于從文件尾部讀取數據,-n +2 指定從第二行讀取到行尾。我們常用 tail -f logfile.log 來監控 log 輸出。

Shaanxi數據量:

cat apartment_prices.csv | grep ^Shaanxi | wc -l

# 2

輸出指定列

中國城市近 4 年房產價格:

City,2013,2014,2015,2016

Beijing,22000,30000,35000,38000

Shanghai,20000,25000,30000,35000

Shaanxi-xi'an,6000,5800,5700,6000

Shaanxi-baoji,1000,1200,2000,2000

輸出 2014 年的數據:

cat apartment_prices.csv | awk -F, '{ print $3; }'

awk -F, '{ print $3; }':awk 是 linux 中非常強大的列表處理工具,linux 系統中的幾乎所有輸出都可以用 awk 處理。

-F,:指定列分隔符為 ',' (CSV格式),默認為空格,制表符。

pring $3: 輸出 第3列 數據。

output:

# 2014

# 30000

# 25000

# 5800

# 1200

# 輸出前 3 列

cat apartment_prices.csv | awk -F, '{ print $1","$2","$3; }'

output:

City,2013,2014

Beijing,22000,30000

Shanghai,20000,25000

Shaanxi-xi'an,6000,5800

Shaanxi-baoji,1000,1200

按列排序

中國城市近 4 年房產價格:

City,2013,2014,2015,2016

Beijing,22000,30000,35000,38000

Shanghai,20000,25000,30000,35000

Shaanxi-xi'an,6000,5800,5700,6000

排序 2014 年數據:

# 僅輸出數據 2014 的數據

cat apartment_prices.csv | tail -n +2 | awk -F, '{ print $3 }' | sort -g

sort -g:sort 用于排序數據,默認按照數據長度排序,-g 指定按照數字值排序。

output:

1200

5800

25000

30000

# 輸出 city 信息

cat apartment_prices.csv | tail -n +2 | awk -F, '{ print $1 "," $3 }' | sort -t ',' -k 2 -g

sort -t ',' -k 2 -g: -k 2 指定按照第二列排序,-t , 指定列分隔符。

output:

Shaanxi-baoji,1200

Shaanxi-xi'an,5800

Shanghai,25000

Beijing,30000

比較兩列數據

比較數據需要將數據輸出到文件,然后使用git diff 或者 vim -d file1 file2 來比較。

比如比較 2014 和 2015 的數據

# 1. 提取 2014 年的數據

cat apartment_prices.csv | tail -n +2 | awk -F, '{ print $4; }' > 2014

# 2. 提取 2015 年的數據

cat apartment_prices.csv | tail -n +2 | awk -F, '{ print $5; }' > 2015

# 3. git diff 2014 2015

git diff 2014 2015

output diff:

diff --git a/2014 b/2015

index 162645c..6accdc5 100644

--- a/2014

+++ b/2015

@@ -1,4 +1,4 @@

+38000

35000

-30000

-5700

+6000

2000

實戰應用

最近業務人員需要更新產品的數據,通常情況,業務人員使用 Excel 做好產品數據,然后使用 CSV 格式導入到系統中。但是由于遺留系統的原因,CSV數據需要導入到不同的系統中。遺留系統的數據同步需要 Developer 手動進行。

在整個數據同步過程中,涉及數據提取,比較,校驗等過程。由于 Excel 對于 Developer 并不那么友好,因此用到了本文中的處理方法,使用 shell script 處理 CSV 文件。

參考資料

總結

以上是生活随笔為你收集整理的shell脚本读取csv_shell script 处理 CSV 文件(Excel)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。