簡體   English   中英

從bash腳本文件讀取csv文件

[英]Read a csv file from a bash scripting file

在一個文件夾中,我有2個文件。 Valuation.csv和另一個文件myScript.sh

我的CSV文件有10行5列。 我已經嘗試過多次閱讀,但從未成功。 這是我在myScript.sh中嘗試作為代碼進行的操作:

第一次嘗試:

#!/bin/bash

    while read -r line do
        field1=$(echo $line | awk -F'|' '{printf "%s", $1}' | tr -d '"')
        field2=$(echo $line | awk -F'|' '{printf "%s", $2}' | tr -d '"')

        echo $field1 $field2 done < $Valuation.csv

結果:/myScript.sh:第10行:.csv:無此類文件或目錄

第二次嘗試:

cat Valuation.csv|while read line   do
read -d, col1 col2 < <(echo $line)
echo "I got:$col1|$col2"   done

結果:無

我正在運行這樣的文件:

./myScript.sh

謝謝

這是用excel打開的csv文件

這是我的文件data.csv

Site,Post,Subject,User,Status
stackover flow,bash,read csv,James,ok
git,linux,core,Novy,ko

在我的bash腳本中,我有類似以下內容:

#!/bin/bash
INPUT=./data.csv
OLDIFS=$IFS
IFS=,
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read site post subject usr status
do
    echo "Site : $site"
    echo "Post : $post"
    echo "Subject : $subject"
    echo "User : $usr"
    echo "Status : $status"
done < $INPUT
IFS=$OLDIFS

產量

站點:stackover flow帖子:bash主題:讀取csv用戶:James狀態:ok站點:git帖子:linux主題:core用戶:Novy狀態:ko

你可以在這里看看

詹姆斯,避免在bash循環內調用實用程序。 那是非常低效的。 避免使用固定數量的字段-如果添加另一個字段怎么辦? 只需使用read -a array...並將內部字段分隔符設置為以逗號分隔 (例如IFS=$',\\n'IFS=$',\\n'就可以相當輕松地read -a array... bash中的.csv數據。

例如,編寫一個將.csv文件名作為第一個參數讀取的腳本,您可以執行以下操作:

#!/bin/bash

declare -i row=0

while IFS=$',\n' read -r -a array; do
    printf "row %d - read %d fields.\n" $((row++)) ${#array[@]}
    for i in "${array[@]}"; do
        printf " %-12s" "$i"
    done
    echo ""
done < "$1"

注意:雖然您可能會想在awk處理整個問題,但由於這似乎是bash練習,所以對於短的.csv文件,bash的功能不勝枚舉)

示例數據

(我不想重新輸入您的電子表格,所以這里是前兩行)

$ cat company.csv
Facebook,35587,55800000000,1567988,491000000000,8.80x
Uber,16000,11300000000,706250,120000000000,10.6x

運行腳本並僅輸出行數和每行字段,然后輸出字段值本身,您將獲得:

$ bash readcsv.sh company.csv
row 0 - read 6 fields.
 Facebook     35587        55800000000  1567988      491000000000 8.80x
row 1 - read 6 fields.
 Uber         16000        11300000000  706250       120000000000 10.6x

仔細看看,如果您有疑問,請告訴我。

暫無
暫無

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

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