【发布时间】:2016-06-26 16:59:42
【问题描述】:
我正在尝试解析类似于以下的逗号分隔文件,并将每个字段提取到一个变量中:
bob,mechanic,single,swimming,/bob/tmp,batman,
joe,architect,married,tennis,/joe/tmp,superman,34
使用此脚本:
#!/bin/bash
#|| [[ -n "$input" ]]
while IFS=, read -r a b c d e f g; do
echo "$a"
done < "commafile.txt"
但是当我从命令行使用 ./parsecommas 运行脚本(称为 parsecommas)时,脚本会立即终止而没有任何输出。
我做错了什么?我正在运行 OSX Yosemite 并使用 xcode 编辑脚本,然后在终端运行它。我检查了有缺陷的隐形物,但没有发现。 commafile.txt 与 bash 脚本 parsecommas 位于同一目录中。
编辑:在运行 c++ 程序并且只能读取文件的最后一行之后,我意识到这个问题可能不是我的代码,而是我用来创建文本文件的方法。我用过
touch commafile.txt
创建我的文件,我只能在 c++ 程序中使用 getline(file, line) 时读取文件的最后一行。有没有其他人遇到过这个问题?我的 Mac/文本编辑器有什么问题?
cat commafile.txt
仅打印文件中的最后一行,而当我在 XCode 或 TextEditor 中打开文件时,会显示所有行。我将一个框形字段中的 word doc 的内容复制粘贴到 commafile.txt。
【问题讨论】:
-
我还想知道是否有 IFS 不能使用的字符?像冒号、分号、克拉、星号、哈希符号等?还要提到的一件事是我在终端中创建了带有触摸的文件解析逗号。
-
不,没有任何角色对 IFS 免疫。
-
比你如何创建文件更重要的是你如何填充文件。例如,如果它缺少尾随换行符,那将导致您的错误(至少对于文件中的最后一行不可读)。
-
我建议在您的问题中包含
bash -x parsecommas和cat -v commafile.txt的输出。 -
Word 不是 ASCII 编辑器。如果你从 Word 中得到一个看起来像逗号的字符,你不能假设它是一个逗号。
标签: bash shell parsing scripting command