gpt4 book ai didi

linux - 将 CSV 值导入 Bash

转载 作者:太空狗 更新时间:2023-10-29 11:32:33 25 4
gpt4 key购买 nike

我有以下 CSV 文件:

more my_file.csv
Alabama,Alaska,Arizona,Arkansas,California,Colorado,Connecticut,Delaware,Florida,Georgia,Hawaii,Idaho,Illinois,Indiana,Iowa
1000,"1 0 0 1",1002,1002,1003,1004,1005,"1 0 0 6",1007,1008,1009,1010,1011,1012,1013
100," 1 0 1 ",102,102,103,104,105,"1 0 6 2",107,108,109,"1 1 0 3 5 62 0",111,112,113
10001,10011,10021,10021,10031,10041,10051,10061,10071,10081,10091,10101,10111,10121,10131
.
.
.
.

我的目标是在我的 bash 脚本中使用它们的值设置 CSV 参数(CSV 中的所有状态)

例如(关于第二行值)

在我的 bash 脚本中我将能够读取每个参数

例子

 echo $Alabama
1000
echo $Alaska
1 0 0 1

首先,我只是尝试编写以下(错误的)代码,以便使用它们的值设置参数:

#!/bin/bash

counter=1

for CSV_COLUMN in Alabama Alaska Arizona Arkansas California Colorado Connecticut Delaware Florida Georgia Hawaii Idaho Illinois Indiana Iowa
do
export $CSV_COLUMN=` echo $CSV_LINE | cut -d',' -f$counter `
counter=$counter+1
done

测试应该是(来自 bash 脚本)

echo $Alabama
1000

我应该如何更改我的代码以实现我的想法?

最佳答案

解决问题的基本构建 block :

#!/bin/bash

while IFS="," read Alabama Alaska Arizona Arkansas California Colorado Connecticut Delaware Florida Georgia Hawaii Idaho Illinois Indiana Iowa
do
echo $Alabama
done < my_file.csv

给定您的输入文件,这将产生:

sh$ ./m.sh 
Alabama
1000
100
10001

编辑 如果您只对第 n 行感兴趣(存储在 CSV_LINE 中),您可以 sed -n ...p 你的输入文件(并使用 if 而不是 while):

#!/bin/bash

# ...
# Set your CSV_LINE to the (file) line number you are looking for (here, line 2)
CSV_LINE=2
# ...

sed -n "${CSV_LINE}p" | if IFS="," read Alabama Alaska Arizona Arkansas California Colorado Connecticut Delaware Florida Georgia Hawaii Idaho Illinois Indiana Iowa
then
echo $Alabama
fi < my_file.csv

请注意:由于管道是在子shell中执行的,所以各种变量只绑定(bind)内部 的主体if 语句。


如果您不喜欢 if 结构,我刚刚了解到您可能会使用进程替换:

#!/bin/bash

# ...
# Set your CSV_LINE to the (file) line number you are looking for (here, line 2)
CSV_LINE=2
# ...

IFS="," read Alabama Alaska Arizona Arkansas California Colorado Connecticut Delaware Florida Georgia Hawaii Idaho Illinois Indiana Iowa \
< <(sed -n "${CSV_LINE}p" < my_file.csv)

echo $Alabama

没有管道,就没有子外壳——因此在发出read 内部命令后,可以从脚本中的任何地方访问变量。

关于linux - 将 CSV 值导入 Bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24762223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com