gpt4 book ai didi

Bash shell 脚本嵌套 while 循环与 IFS

转载 作者:行者123 更新时间:2023-11-29 09:50:56 24 4
gpt4 key购买 nike

我正在尝试使用 bash shell 脚本解析一组 csv 文件,文件如下所示:

File1: /tmp/test.txt
key1,key1file.txt
key2,key2file.txt
key3,key3file.txt

Files: /tmp/inter/key1file.txt
abc,cdf,123,456

Files: /tmp/inter/key2file.txt
abc,cdf,123,456

Files: /tmp/inter/key3file.txt
abc,cdf,123,456

我尝试使用 2 个 while 循环解析这些文件:

while IFS="," read keycol keyfile
do
while IFS="," read keyval
do
echo "inside inner while loop"
echo "$keycol|$keyval"
done < "/tmp/inter/$keyfile"
done < /tmp/test.txt

并期待这段代码输出

key1,abc
key1,cdf
key1,123
key1,456 and so on...

但是,当我运行这段代码时,我没有得到任何输出,这表明第二个循环没有被执行。任何指向正确方向的指示都会有所帮助。谢谢

最佳答案

您在第二个循环中没有按 , 正确拆分。 read 一般按IFS 拆分,给变量赋值,每个变量一个字段,剩下的进入最后提供的变量。但如果您只提供一个变量,所有内容都会存储在那里。

相反,让 read, 拆分成一个数组,然后循环遍历该数组中的值,如下所示:

#!/bin/bash
while IFS="," read keycol keyfile; do
while IFS="," read -a values; do
for val in "${values[@]}"; do
echo "$keycol,$val"
done
done < "/tmp/inter/$keyfile"
done < /tmp/test.txt

你会得到:

key1,abc
key1,cdf
key1,123
key1,456
key2,abc
key2,cdf
key2,123
key2,456
key3,abc
key3,cdf
key3,123
key3,456

关于Bash shell 脚本嵌套 while 循环与 IFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45034012/

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