最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

介紹

我將介紹它,因為在使用 Linux Bash 腳本讀取簡單的 CSV 文件并對其進行處理時,它非常容易編寫。

如何使用 cut 命令

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

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 將列存儲在變量中

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

hoge.sh 的內(nèi)容

?#!/bin/bash

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

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

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

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

?#!/bin/bash

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

這種方式是最推薦的,因為它是一個數(shù)組,所以很容易循環(huán)、添加、刪除、處理分列,并且可以靈活的引用和使用變量擴展來展示。

#!/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默認為空格、制表符和換行符,因此在腳本中不指定IFS進行處理.我可以的。

?#!/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:
$ 

為了防止這種情況,您需要用逗號替換空格和制表符,并將它們讀入以逗號分隔的數(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 文件之前對其進行處理,方法是將進程替換的結(jié)果 <() 傳遞給標準輸入。

?#!/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 命令處理它可能會更簡單。
awk命令從頭開始逐行讀取指定為參數(shù)的文件,自動將分隔符分隔的內(nèi)容存儲在變量$1,$2…中,可以逐行描述要處理的內(nèi)容。處理 CSV 文件時,需要在 -F 選項中指定逗號作為分隔符。

$ 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)容變得復雜,則可以將處理內(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 腳本那樣指定選項即可讀取,但由于變量位置已打包并存儲,因此指定選項更安全。

$ 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 命令也是一個功能強大的命令,但是還有一種方法是使用 perl 命令來處理 CSV 文件,這種方法更加直觀和復雜。
這是一個非常復雜的命令,默認包含在 Linux 服務器中,所以如果您有興趣,可以使用它。

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

您可能感興趣的文章:

相關文章

最新評論

渝北区| 合水县| 青海省| 宁化县| 陇西县| 裕民县| 定南县| 勐海县| 广东省| 城口县| 汝州市| 景东| 奉新县| 麻江县| 余庆县| 龙里县| 淳安县| 开鲁县| 遵化市| 同仁县| 固镇县| 新化县| 商南县| 汉沽区| 阿克苏市| 芜湖县| 十堰市| 赞皇县| 夹江县| 资阳市| 孝昌县| 武义县| 固安县| 于田县| 右玉县| 东乡族自治县| 新密市| 岑溪市| 双城市| 棋牌| 靖边县|