我有一个简单的概念,就像做类似的事情一样,我可以很容易地做到。
我有一个输入文件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
经历了许多不同的错误,但是一无所获。
答案 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
希望这会有所帮助。