我有具有以下结构的 .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 上的这篇文章)。