![.csv 파일에서 특정 열을 찾고 필터링하는 방법은 무엇입니까? [복사]](https://linux55.com/image/29949/.csv%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%ED%8A%B9%EC%A0%95%20%EC%97%B4%EC%9D%84%20%EC%B0%BE%EA%B3%A0%20%ED%95%84%ED%84%B0%EB%A7%81%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
다음 구조의 .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의 이 기사).