kkS*_*der 2 unix csv bash shell parsing
我正在尝试解析我使用Google Spreadsheet制作的csv文件.它非常简单,用于测试目的,基本上是:
1,2
3,4
5,6
问题是csv不以换行符结尾,所以当我cat在BASH中的文件时,我得到了
MacBook-Pro:Desktop kkSlider$ cat test.csv
1,2
3,4
5,6MacBook-Pro:Desktop kkSlider$
Run Code Online (Sandbox Code Playgroud)
我只想使用每个指南建议的while循环在BASH脚本中逐行阅读,我的脚本如下所示:
while IFS=',' read -r last first
do
echo "$last $first"
done < test.csv
Run Code Online (Sandbox Code Playgroud)
输出是:
MacBook-Pro:Desktop kkSlider$ ./test.sh
1 2
3 4
Run Code Online (Sandbox Code Playgroud)
关于如何让它读取最后一行并回应它的任何想法?
提前致谢.
您可以强制循环的输入以换行结束:
#!/bin/bash
(cat test.csv ; echo) | while IFS=',' read -r last first
do
echo "$last $first"
done
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果输入在结尾处已经有换行符,则可能会在输出结尾处产生一个空行.您可以通过一些补充来解决这个问题:
!/bin/bash
(cat test.csv ; echo) | while IFS=',' read -r last first
do
if [[ $last != "" ]] ; then
echo "$last $first"
fi
done
Run Code Online (Sandbox Code Playgroud)
另一种方法依赖于这样的事实,即值被放入变量中,read但由于while语句,它们只是没有被输出:
#!/bin/bash
while IFS=',' read -r last first
do
echo "$last $first"
done <test.csv
if [[ $last != "" ]] ; then
echo "$last $first"
fi
Run Code Online (Sandbox Code Playgroud)
那个工作没有创建另一个子shell来修改while语句的输入.
当然,我假设你想在循环中做更多的事情,只是用空格而不是逗号输出值.如果这就是你想要做的,那么还有其他工具比bashread循环更适合,例如:
tr "," " " <test.csv
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5671 次 |
| 最近记录: |