2017-03-02 14 views
-2

ある条件に基づいて一部をエクスポートしたい非常に大きなcsvファイルがあります - すべての列を保持する必要がありますが、CSVの一部のみをエクスポートする必要があります。summary_id> 92900 BASHでこのコマンドをどのように書きますか?bashの条件に基づいて出力リダイレクトcsv

$ head -n 10 snapshots.csv 
id,station_id,status,available_bikes,available_docks,created_at,summary_id 
32583548,465,Active,18,7,2015-12-12 12:40:07.325473,92982 
32583549,466,Active,28,33,2015-12-12 12:40:07.330174,92982 
32583550,467,Active,13,17,2015-12-12 12:40:07.334921,92982 
32583551,468,Active,21,22,2015-12-12 12:40:07.339576,92982 
32583552,469,Active,44,19,2015-12-12 12:40:07.344086,92982 
32583553,470,Active,12,46,2015-12-12 12:40:07.34872,92982 
32583554,471,Active,12,11,2015-12-12 12:40:07.353296,92982 
32583555,472,Active,12,19,2015-12-12 12:40:07.357868,92982 
32583556,473,Active,0,29,2015-12-12 12:40:07.362545,92982 
+1

'輸出一部をBE-するコマンドを書くの明確な方法?これについてもっと説明できますか?どのようにこれをやりたいのですか?変数としてエクスポートしますか? (変数) – Inian

+4

'awk -F、 '$ NF> 92900' file.csv> exported.csv' – anubhava

+0

ありがとう、' $ NF'は何ですか? –

答えて

0

@anubhavaは完全に彼のコメントでそれを得た。 awkは、ここで使用するツールです。

awk -F, '$NF > 92900' file.csv > exported.csv 

Explanation-

-F,デリミタはカンマであることを設定します。

$NFは、最後の列を参照するawkのinbuilt変数です。関心のある項目として最後の列が常にあるとは限りませんので、$7を使用することもできます。

csv`の

awk -F, '{if ($NF > 92900) print $0}' file.csv > exported.csv 

または

awk -F, '{if ($7 > 92900) print $0}' file.csv > exported.csv 
0

勿論、awkは(Anubhavaコメント参照)は、おそらく、この作業のために最も適していますが、bashで行う方法を尋ねたので:

#!/bin/bash 
cat snapshots.csv | 
while read line ; do 
    value=${line##*,} 
    if [ $value -gt 92900 ] ; then 
     echo $line 
    fi 
done 

${line##*,}が点で最大$ラインからすべてを削除します最後のカンマを含む(incl)。

+1

ファイルから実際に読み取っているわけではありません。有効にするために修正し、csvにカンマ区切りの値があります。 – Inian

関連する問題