.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のこの記事)。

おすすめ記事