我正在尝试解析我用 Google 电子表格制作的 csv 文件。出于测试目的,它非常简单,基本上是:
1,2
3,4
5,6
问题是 csv 没有以换行符结尾,所以当我在 BASH 中 cat
文件时,我得到了
MacBook-Pro:Desktop kkSlider$ cat test.csv
1,2
3,4
5,6MacBook-Pro:Desktop kkSlider$
我只想使用每个指南都建议的 while 循环在 BASH 脚本中逐行阅读,我的脚本如下所示:
while IFS=',' read -r last first
do
echo "$last $first"
done < test.csv
输出是:
MacBook-Pro:Desktop kkSlider$ ./test.sh
1 2
3 4
关于如何让它读取最后一行并回显它有什么想法吗?
提前致谢。
最佳答案
您可以强制循环的输入以换行结束:
#!/bin/bash
(cat test.csv ; echo) | while IFS=',' read -r last first
do
echo "$last $first"
done
不幸的是,如果输入末尾已经有换行符,这可能会导致输出末尾出现空行。您可以通过添加一些内容来解决这个问题:
!/bin/bash
(cat test.csv ; echo) | while IFS=',' read -r last first
do
if [[ $last != "" ]] ; then
echo "$last $first"
fi
done
另一种方法依赖于这样一个事实,即值被 read
placed 到变量中,但由于 while 的原因,它们不会被输出
语句:
#!/bin/bash
while IFS=',' read -r last first
do
echo "$last $first"
done <test.csv
if [[ $last != "" ]] ; then
echo "$last $first"
fi
无需创建另一个子 shell 即可修改 while
语句的输入。
当然,我在这里假设您想在循环中做更多的事情,只输出带有空格而不是逗号的值。如果这就是您想要做的全部,还有其他工具比 bash
读取循环更适合,例如:
tr "," " " <test.csv
关于bash - 在 bash 中解析 .csv 文件,而不是读取最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11821979/