在调用/创建数组时从csv指定源代码行

时间:2016-05-10 15:24:12

标签: arrays linux bash csv

我有一个包含以下数据的csv:

if (getWindow().getDecorView().getLayoutDirection() == View.LAYOUT_DIRECTION_LTR) {
        getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
    }

我编写了一些代码将每个字段转换为变量,并在字段2(f2)中的每个字中创建一个数组:

L'Oreal, Apricot and Peach Conditioner, Sale
Sure, Camomile Deodorant Spray, Standard
Brut, Classic Aftershave, Sale 

我现在的问题是,因为该文件包含多行,我需要根据创建的数据行命名每个数组。当我#!/bin/bash input="/home/abbie/Documents/Scripts/test.csv" #read the csv and creates a variable for each field while IFS=',' read -r f1 f2 f3 f4 do #Create an array out of each word in field 2 which is the description field read -a arr <<<$f2 #print the specified array- the first word is ${arr[0]} echo ${arr[0]} done < "$input" 它打印每行f2的第一个单词时,我希望能够调出一个特定的行。 编辑:澄清(对不起,我是noob,并没有解释得很好)我想以某种方式更改我的代码,以便不是为整个文件中的f2中的每个单独的单词创建一个数组,我想在逐行的基础上为f2中的每个单词创建一个数组,并以某种方式能够显示它来自的csv行。

1 个答案:

答案 0 :(得分:0)

我的回答只是猜测,但也许可以帮到你。也许澄清你的问题,以便我能更好地解决我的问题。

#!/bin/bash
input="test.csv"

# it prints specyfic argument of array: array guide http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_10_02.html
getLine()
{
    local lineNo="$1"
    echo "${inputLines[$lineNo]}"
}

# gets specyfic block of line csv's file
getBlock()
{
    local lineNo="$1"
    local blockNo="$2"

    # split string into array by read function
    # look at: http://stackoverflow.com/questions/10586153/split-string-into-an-array-in-bash
    IFS=',' read -r -a block <<< "$(getLine $lineNo)"
    echo "${block[$blockNo]}"
}

getElement() 
{
    local lineNo="$1"
    local blockNo="$2"
    local elementNo="$3"

    read -r -a element <<< "$(getBlock $lineNo $blockNo)"
    echo "${element[$elementNo]}"
}

# read file into an array
# based on nhed response: http://stackoverflow.com/questions/11393817/bash-read-lines-in-file-into-an-array
IFS=$'\r\n' GLOBIGNORE='*' command eval 'inputLines=($(cat $input))'
echo "Loaded ${#inputLines[@]} lines."

getLine 0         # print line of csv
getBlock 0 1      # print block of csv
getElement 0 1 2  # print element of csv