从中读取多变量csv bash构建多行文件

时间:2018-10-28 19:23:11

标签: bash shell csv

我有一个简单的概念,就像做类似的事情一样,我可以很容易地做到。

我有一个输入文件input.csv

1a,1b
2a,2b

我想要以下输出

输出文件1

This is variable 1 named 1a ok
This is variable 2 named 1b ok

输出文件2

This is variable 1 named 2a ok
This is variable 2 named 2b ok

我认为我可以做以下类似的事情

i=1
while IFS=, read var1 var2; do
echo This is variable 1 named "var1" > filenamei
echo This is variable 2 named "var2" >> filenamei
i=i+1
done </inputfile.csv

我以前编写过代码,可以从一个长文件中获取单个变量,然后将输出写入单个文件,并且效果很好。像下面一样

输入文件

a
b

单个输出文件

This is A
This is B

脚本为

while read p;do
echo this is "$p" >>output file
done < input file

经历了许多不同的错误,但是一无所获。

1 个答案:

答案 0 :(得分:0)

通过配置双循环将很容易:外循环遍历行,而内循环则用于逗号分隔的字段。那怎么样:

@Inject
lateinit var presenter: LoginMvpPresenter<LoginMvpView>

说明:

  • 为了用逗号分隔输入行,我们将#!/bin/bash i=1 while read -r line; do ifs_back="$IFS" IFS="," set -- $line for ((j=1; j<=$#; j++)); do echo This is variable "$j" named "${!j}" >> "filename${i}" done IFS="$ifs_back" i=$((i+1)) done < "inputfile.csv" 临时设置为“”,然后将字段分配给位置参数IFS$1
  • 内部循环的循环计数器$2以1开始,以字段数j结尾。
  • 我们可以通过$#1访问position参数的值。
  • 为清理内部循环,我们检索${!j}并在下一行增加IFS

上面的代码对于#lines和#fields是灵活的,因此可以与输入一起使用:

i

和:

1a,1b
2a,2b
3a,3b

希望这会有所帮助。

相关问题