2017-03-02 50 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

'的csv'出口一部分?你能解釋一下嗎?你想如何做到這一點,出口作爲一個變量? (哪個變量) – 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,設置分隔符是逗號。

$NFawk中的內置變量,它指最後一列。你也可以使用$7,以防你總是沒有最後一列作爲你感興趣的領域。

寫命令的更明確的方式將是─

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

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

Ofcourse,awk可能是最適合這項任務(見註釋Anubhava),而是因爲你問到如何在bash做:

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

${line##*,}將刪除一切從$線高達(含)最後一個逗號。

+1

您不是從文件中實際讀取數據,而是將其修復爲有效,並且csv具有逗號分隔值。 – Inian