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