file.csv
파일의 여섯 번째 열 이 user_ids_to_keep.csv
.
내가 읽고 싶은 파일은 file.csv
다음과 같습니다.
Year,WeekOfYear,DaysInWeek,USAIsBankHoliday,holidays,**user_id**
2013,1,5,2,1,1
2013,1,5,2,1,2
2013,1,5,2,1,3
, etc.
일치하는 ID를 얻는 user_ids_to_keep.csv
ID 목록 은 다음과 같습니다.
1
3
5
, etc.
output.csv
내가 만들려는 파일은 다음과 같아야 합니다.
Year,WeekOfYear,DaysInWeek,USAIsBankHoliday,holidays,**user_id**
2013,1,5,2,1,1
2013,1,5,2,1,3
,etc.
만약 열사용자 IDfile.csv 파일 중 첫 번째 파일입니다. 명령을 사용할 수 있다고 생각합니다.
grep -Fwf
하지만 지금은 이 문제를 어떻게 해결해야 할지 모르겠습니다.
답변1
파일 표시:
head *
...산출:
==> file.csv <==
Year,WeekOfYear,DaysInWeek,USAIsBankHoliday,holidays,**user_id**
2013,1,5,2,1,1
2013,1,5,2,1,2
2013,1,5,2,1,3
==> user_ids_to_keep.csv <==
1
3
5
보기 흉한 POSIX 코드(한 줄로 복사 가능):
{ read x ; echo $x ; \
while read x ; \
do for f in `cat user_ids_to_keep.csv` ; \
do n=${x#${x%,*},} ; \
if [ $n = $f ] ; \
then echo $x ; \
continue ; \
fi ; \
done ; \
done ; } < file.csv | tee output.csv
보여주다:
Year,WeekOfYear,DaysInWeek,USAIsBankHoliday,holidays,**user_id**
2013,1,5,2,1,1
2013,1,5,2,1,3
답변2
한 줄로 작성할 수 있습니다.
paste -sd '' user_ids_to_keep.csv | sed 's/[ \t]*//' | xargs -i@ sed -n '/,[@][ \t]*$/p' file.csv
설명하다:
paste -sd '' user_ids_to_keep.csv
개행 없이 한 줄에 파일 데이터를 출력합니다.
sed 's/[ \t]*//'
이전 출력에서 모든 공백을 제거합니다.
xargs -i@ sed -n '/,[@][ \t]*$/p' file.csv
변수 "@"의 이전 출력을 패턴으로 사용하여 file.csv의 각 줄 끝을 비교하고 패턴이 일치하면 인쇄합니다.