1000行と10列を含むCSVデータセットStudent.csvがあります。
サンプルデータは次のとおりです。
s_id,s_name,s_dob,s_class,s_marks,s_parentname,
1,abc,1/1/18,5,49,def,
2,xyz,1/1/17,4,85,abc,
3,pqr,1/2/18,2,78,mnp,
このデータセットでは、行に「abc」を含むすべての日付をテキストファイルにコピーしたいと思います。
予想出力:
text.txt
1/1/18
1/1/17
ベストアンサー1
grep abc student.csv | cut -d, -f 3 >text.txt
これにより、最初にどこからでも部分student.csv
文字列を含むすべての行を抽出し、そのabc
行から3番目のカンマ区切りの列を削除して保存しますtext.txt
。
質問に提供されたデータに基づいて、最終的text.txt
に次のものが含まれます。
1/1/18
1/1/17
これは元のファイルによって異なります。シンプルCSVファイル、つまりカンマまたは改行を含むフィールドはありません。
検索したいabc
項目完全な言葉grep -w abc
代わりにjustを使用してくださいgrep abc
。これにより、などの文字列を含む行の一致は防止されますが、埋め込みabcde
フィールドとはまだ一致しますabc xyz
。
任意の複雑な文字列(まだ単純なCSVファイルにある)を含むフィールドを探し、フィールドがその文字列とまったく同じである必要がある場合は、各行のフィールドを繰り返す必要があります。
string='some string' awk -F, '{ for (i = 1; i <= NF; ++i) if ($i == ENVIRON["string"]) { print $3 ; next } }' student.csv
このawk
コードは各行のすべてのフィールドを繰り返し、値が環境変数の値とまったく同じカンマで区切られたフィールドを見つけますstring
。そのフィールドが見つかると、3番目のフィールドが印刷されます。