.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의 이 기사).

관련 정보