欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Bash讀取和處理CSV文件的方法

 更新時(shí)間:2023年02月16日 11:13:45   作者:水滴石穿_wang  
本文主要介紹了使用Bash讀取和處理CSV文件的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

介紹

我將介紹它,因?yàn)樵谑褂?Linux Bash 腳本讀取簡單的 CSV 文件并對其進(jìn)行處理時(shí),它非常容易編寫。

如何使用 cut 命令

作為讀取 CSV 文件并使用您經(jīng)??吹降?Bash 腳本對其進(jìn)行處理的方法,有一種描述是從標(biāo)準(zhǔn)輸入中逐行讀取 CSV 文件并使用 cut 命令將列存儲(chǔ)在變量中。

hoge.sh 的內(nèi)容

?#!/bin/bash

while read line
do
? # 保存 $line 行中讀入的CSV文件的一行文本,通過cut命令分列保存在變量中。
? col1=$(echo ${line} | cut -d , -f 1)
? col2=$(echo ${line} | cut -d , -f 2)
? col3=$(echo ${line} | cut -d , -f 3)

? # 處理內(nèi)容描述在這里

? # $colX 參考讀入的 CSV 文件的文本
? echo "col1:$col1 col2:$col2 col3:$col3"
done < $1

csv文件的內(nèi)容

$ cat hoge.csv 
a1,a2,a3
b1,b2,b3
c1,c2,c3
$ 

以 csv 文件作為參數(shù)執(zhí)行腳本

$ ./hoge.sh hoge.csv 
col1:a1 col2:a2 col3:a3
col1:b1 col2:b2 col3:b3
col1:c1 col2:c2 col3:c3
$ 

如何使用 IFS 將列存儲(chǔ)在變量中

通過將分隔符 IFS 的環(huán)境變量更改為,并在 read 命令中設(shè)置多個(gè)變量,可以在不使用 cut 命令的情況下進(jìn)行簡單的描述。

hoge.sh 的內(nèi)容

?#!/bin/bash

?# 將讀取的CSV文件的一行文本分列存儲(chǔ)在多個(gè)變量中
while IFS=, read col1 col2 col3
do
? # 處理內(nèi)容描述在這里

? # $colX 參考讀入的 CSV 文件的文本
? echo "col1:$col1 col2:$col2 col3:$col3"
done < $1

如何使用 IFS 將列存儲(chǔ)在數(shù)組中(●)

您還可以使用 read 命令的 -a 選項(xiàng)將拆分列存儲(chǔ)在數(shù)組中。

?#!/bin/bash

while IFS=, read -a col
do
? echo "col1:${col[0]} col2:${col[1]} col3:${col[2]}"
done < $1

這種方式是最推薦的,因?yàn)樗且粋€(gè)數(shù)組,所以很容易循環(huán)、添加、刪除、處理分列,并且可以靈活的引用和使用變量擴(kuò)展來展示。

#!/bin/bash
while IFS=, read -a col
do
? for c in ${col[@]}
? do
? ? echo "loop:$c"
? done

? unset col[2]
? col+=(lastcol)

? echo "${col[@]}"
? echo "${col[@]:1}"
? echo "${col[@]/#/col:}"
done < $1
$ ./hoge.sh hoge.csv 
loop:a1
loop:a2
loop:a3
a1 a2 lastcol
a2 lastcol
col:a1 col:a2 col:lastcol
loop:b1
loop:b2
loop:b3
b1 b2 lastcol
b2 lastcol
col:b1 col:b2 col:lastcol
loop:c1
loop:c2
loop:c3
c1 c2 lastcol
c2 lastcol
col:c1 col:c2 col:lastcol
$ 

對于空格或制表符分隔的文件

如果文件分隔符是空格分隔符(SSV)或制表符分隔符(TSV),則分隔符的環(huán)境變量IFS默認(rèn)為空格、制表符和換行符,因此在腳本中不指定IFS進(jìn)行處理.我可以的。

?#!/bin/bash

while read -a col
do
? echo "col1:${col[0]} col2:${col[1]} col3:${col[2]}"
done < $1

但是,如果該列為空,則將省略其前后連續(xù)的空格和制表符,并將變量位置打包在一起。

$ cat hoge.ssv
a1 a2 a3
b1  b3
  c3
$ 
$ ./hoge.sh hoge.ssv
col1:a1 col2:a2 col3:a3
col1:b1 col2:b3 col3:
col1:c3 col2: col3:
$ 

為了防止這種情況,您需要用逗號(hào)替換空格和制表符,并將它們讀入以逗號(hào)分隔的數(shù)組。

?#!/bin/bash

IFS=,
while read line
do
? col=(${line// /,})
? echo "col1:${col[0]} col2:${col[1]} col3:${col[2]}"
done < $1
#!/bin/bash

IFS=,
while read line
do
? col=(${line//$'\t'/,})
? echo "col1:${col[0]} col2:${col[1]} col3:${col[2]}"
done < $1

如何處理要讀取的CSV文件

如果您想以相反的順序讀取 CSV 文件,替換特定字符,然后讀取它,您可以在讀取 CSV 文件之前對其進(jìn)行處理,方法是將進(jìn)程替換的結(jié)果 <() 傳遞給標(biāo)準(zhǔn)輸入。

?#!/bin/bash

while IFS=, read -a col
do
? echo "col1:${col[0]} col2:${col[1]} col3:${col[2]}"
done < <(tac $1)
$ cat hoge.csv 
a1,a2,a3
b1,b2,b3
c1,c2,c3
$ 
$ ./hoge.sh hoge.csv 
col1:c1 col2:c2 col3:c3
col1:b1 col2:b2 col3:b3
col1:a1 col2:a2 col3:a3
$ 

如何使用awk命令

如果您想輕松處理或聚合 CSV 文件,使用 awk 命令處理它可能會(huì)更簡單。
awk命令從頭開始逐行讀取指定為參數(shù)的文件,自動(dòng)將分隔符分隔的內(nèi)容存儲(chǔ)在變量$1,$2…中,可以逐行描述要處理的內(nèi)容。處理 CSV 文件時(shí),需要在 -F 選項(xiàng)中指定逗號(hào)作為分隔符。

$ awk -F, '{print "col1:"$1,"col2:"$2,"col3:"$3}' hoge.csv
col1:a1 col2:a2 col3:a3
col1:b1 col2:b2 col3:b3
col1:c1 col2:c2 col3:c3
$ 

此外,如果處理內(nèi)容變得復(fù)雜,則可以將處理內(nèi)容描述在文件中作為腳本。

{
  print "col1:"$1,"col2:"$2,"col3:"$3
}
$ awk -F, -f hoge.awk hoge.csv 
col1:a1 col2:a2 col3:a3
col1:b1 col2:b2 col3:b3
col1:c1 col2:c2 col3:c3
$ 

如果文件分隔符是空格分隔 (SSV) 或制表符分隔 (TSV),則無需像 Bash 腳本那樣指定選項(xiàng)即可讀取,但由于變量位置已打包并存儲(chǔ),因此指定選項(xiàng)更安全。

$ awk -F'[. ]' '{print "col1:"$1,"col2:"$2,"col3:"$3}' hoge.ssv
col1:a1 col2:a2 col3:a3
col1:b1 col2: col3:b3
col1: col2: col3:c3
$ 
$ awk -F'[.\t]' '{print "col1:"$1,"col2:"$2,"col3:"$3}' hoge.tsv 
col1:a1 col2:a2 col3:a3
col1:b1 col2: col3:b3
col1: col2: col3:c3
$ 

awk 命令也是一個(gè)功能強(qiáng)大的命令,但是還有一種方法是使用 perl 命令來處理 CSV 文件,這種方法更加直觀和復(fù)雜。
這是一個(gè)非常復(fù)雜的命令,默認(rèn)包含在 Linux 服務(wù)器中,所以如果您有興趣,可以使用它。

到此這篇關(guān)于使用Bash讀取和處理CSV文件的方法的文章就介紹到這了,更多相關(guān)Bash讀取和處理CSV內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

最新評(píng)論