特定の列(最初の列ではない)の値に基づいて行を選択

特定の列(最初の列ではない)の値に基づいて行を選択

file.csvファイルの6番目の列が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.csvIDのリストは次のとおりです。

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コード(1行にコピー可能):

{ 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

おすすめ記事