我有一个包含以下数据的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行。
答案 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