如何查找并筛选 .csv 文件中的特定列?

如何查找并筛选 .csv 文件中的特定列?

我有具有以下结构的 .csv 文件:

cat,dog,mouse,pig,bird,cow,...
21,34,54,566,78,1,...
23,10,12,569,56,4,...
32,20,13,123,56,3,...
34,30,44,322,66,2,...

我想过滤与鼠标相关的列,例如:

54
12
13
44

我该怎么做?请记住,我不知道鼠标在哪一列中找到(我的文件很大,有多个文件需要过滤,并且列的位置各不相同)。

如果我知道确切的位置,我可以使用,例如:

cat $file | awk '{printf("%s\n", $3);}' > filtered_file

如果我不知道鼠标位于第 3 列怎么办?

我真的很感谢任何帮助。

答案1

你可以这样做:

#!/bin/bash

file=$1
column=$2
seperator=','

# Check if a csv file and a column name is given.
if [[ -z $file || -z $column ]]; then
  echo "Usage: $0 csvfile column"
  exit 1
fi

# Iterate through the first row and try to find the requested column.
field=1
for column_name in $(head -n 1 $file | tr $seperator ' '); do
  [[ $column_name == $column ]] && break
  field=$((field+1))
done

# Finally print the output.
cat $file | cut -d $seperator -f $field | sed "1d"

(致谢:我想到了如何从stackoverflow 上的这篇文章以及如何删除第一行的想法unix.com 上的这篇文章)。

相关内容