从bash中以空格分隔的CSV文件中查找特定单元格
我有一个与bash操作逗号分隔值文件(.csv)相关的问题,该文件以空格作为选定的分隔符保存 作为一个例子,我将在这里放置一个小的.csv文件:从bash中以空格分隔的CSV文件中查找特定单元格,bash,csv,Bash,Csv,我有一个与bash操作逗号分隔值文件(.csv)相关的问题,该文件以空格作为选定的分隔符保存 作为一个例子,我将在这里放置一个小的.csv文件: A B C D 1 a b c d 2 e f g h 3 i j k l 4 m n o p 这是我的问题:在bash中是否可以读取特定的值,例如从C4单元读取 试图找到任何具有类似问题的主题,但无法找到 提前谢谢 在awk中可以很容易地做到这一点: 示例。sh #!/bin/bash
A B C D
1 a b c d
2 e f g h
3 i j k l
4 m n o p
这是我的问题:在bash中是否可以读取特定的值,例如从C4单元读取
试图找到任何具有类似问题的主题,但无法找到
提前谢谢 在awk中可以很容易地做到这一点: 示例。sh
#!/bin/bash
awk '
{
if(NR==5){ print $4; }
}
' < "$1"
详细信息
- NR过滤行号
- $4表示第四个字段(C列下)
在awk中可以很容易地做到这一点: 示例。sh
#!/bin/bash
awk '
{
if(NR==5){ print $4; }
}
' < "$1"
详细信息
- NR过滤行号
- $4表示第四个字段(C列下)
棘手的部分是将
“C4”
转换为第3列第4行。bash有一种方法:
#!/bin/bash
cell=$1
file=$2
colnum() {
local -u col=$1
local val=0 i
for ((i=0; i<${#col}; i++)); do
# ascii value of a char, ref: http://stackoverflow.com/q/890262/7552
printf -v ascii "%d" "'${col:i:1}"
val=$(( val*26 + ascii - 64 ))
done
echo "$val"
}
if ! [[ $cell =~ ^([A-Za-z]+)([0-9]+)$ ]]; then
echo "error: invalid cell '$cell'"
exit 1
fi
col=$(colnum "${BASH_REMATCH[1]}")
row=${BASH_REMATCH[2]}
lineno=0
while read -ra fields; do
if (( ++lineno == row )); then
echo "${fields[col-1]}"
fi
done < "$file"
#/bin/bash
单元格=$1
文件=$2
colnum(){
本地-u列=$1
本地val=0 i
对于((i=0;i而言,棘手的部分是将“C4”
转换为第3列第4行
#!/bin/bash
cell=$1
file=$2
colnum() {
local -u col=$1
local val=0 i
for ((i=0; i<${#col}; i++)); do
# ascii value of a char, ref: http://stackoverflow.com/q/890262/7552
printf -v ascii "%d" "'${col:i:1}"
val=$(( val*26 + ascii - 64 ))
done
echo "$val"
}
if ! [[ $cell =~ ^([A-Za-z]+)([0-9]+)$ ]]; then
echo "error: invalid cell '$cell'"
exit 1
fi
col=$(colnum "${BASH_REMATCH[1]}")
row=${BASH_REMATCH[2]}
lineno=0
while read -ra fields; do
if (( ++lineno == row )); then
echo "${fields[col-1]}"
fi
done < "$file"
!/bin/bash
单元格=$1
文件=$2
colnum(){
本地-u列=$1
本地val=0 i
对于((i=0;iCSV文件不是Excel特定的格式。当你说“Excel”时,你会让人们认为你在谈论.xls或.xlsx,这是一个非常不同的问题(对于这些文件,你会想使用Python,它有一些非常好的解析器可用)。也就是说,对于bash,最简单的解决方案稍有不准确,如果单元格中的值带有逗号,则无法正常工作。您知道这里是否可能存在这种情况吗?实际上,我将.csv文件与空格放在一起,因为在我的excel设置中,我可以选择将此文件显示为普通excel文件。我假设没有此设置所有的变量都应该用逗号隔开。你的实际文件将以这种方式保存,所以这不仅仅是为了演示目的?那就行了。(虽然这意味着如果你的任何数据包含空格,我们需要知道它才能给出正确的答案)。您如何生成文件的详细信息需要在问题中;我在这里自己编辑过,但您以后应该这样做。是的,我的所有文件都是这样保存的。谢谢您的观察和建议CSV文件不是Excel特定的格式。当您说“Excel”时,你会让人们认为你在谈论.xls或.xlsx,这是一个非常不同的问题(对于这些,你会想使用Python,它有一些非常好的解析器可用)。也就是说,对于bash,最简单的解决方案稍有不准确,如果单元格中的值带有逗号,则无法正常工作。您知道这里是否可能存在这种情况吗?实际上,我将.csv文件与空格放在一起,因为在我的excel设置中,我可以选择将此文件显示为普通excel文件。我假设没有此设置所有的变量都应该用逗号隔开。你的实际文件将以这种方式保存,所以这不仅仅是为了演示目的?那就行了。(虽然这意味着如果你的任何数据包含空格,我们需要知道它才能给出正确的答案)。关于如何生成文件的详细信息需要讨论;我在这里自己编辑了它们,但您以后应该这样做。是的,我的所有文件都是以这种方式保存的。谢谢您的观察和建议。请使用…更正以修复建议的冗余io。在csv问题上,通常csv是逗号删除的,al尽管即将发布的RFC规范似乎包含了更通用的分隔符()的使用,但我知道——Python CSV模块支持替代分隔符,但当OP指出它是一个“Excel文件”时,我做出了一个假设(当时是合理的)他们使用了Excel默认的CSV格式。true-Excel有不同的CSV类型(mac、dos)-不知道有什么区别。在这里,我基本上是通过查看输入来假设文件是制表符分隔的。请使用…更正以修复建议的冗余io。在csv问题上,通常csv是逗号分隔的,尽管即将发布的RFC规范似乎包括使用更通用的分隔符()事实上,我知道——Python CSV模块支持备用分隔符,但当OP指出它是一个“Excel文件”时,我做出了一个假设(当时是合理的),他们使用了Excel默认的CSV格式。true——Excel有不同的CSV类型(mac、dos)-不知道有什么区别。在这里,我基本上是通过查看输入来假设文件是以制表符分隔的