используя скрипт bash на csv - awk и для цикла - PullRequest
0 голосов
/ 02 октября 2019

У меня есть CSV-файл для каждого дня в месяце, а CSV-файл содержит глобальные точечные данные. Я пытаюсь обрезать каждый CSV по широте и долготе и экспортировать эти CSV. Вот что я пробовал 5 дней в месяце.

for f in ./VBD_npp_d20190[1-5]*.csv; do 
    awk '{for(i=$4>=3.070359 && i=$4<=40.926137 && i=$5>=107.159444 && i=$5<=128.204291){printf "%s ",$i;} print ""}' "$f" > "$f".new;
done

Это не работает. В столбцах $4 и $5 указаны широта и долгота.

Пожалуйста, сообщите, где я ошибаюсь.

Спасибо,

Тило

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Наконец-то это сработало -

для i in ./VBD_npp_d201901*_global*.csv;do o = basename $i global_noaa_ops_v23.csv china_noaa_ops_v23.csv;голова -1 $ i> $ o;awk -F, '{if ($ 4> = 3.07 && $ 4 <= 40.93 && $ 5> = 107.16 && $ 5 <= 128.20) print;}' $ i >> $ o; сделано

0 голосов
/ 02 октября 2019

Пытаетесь сделать это с помощью «для»? Интересный подход, но не то, что я когда-либо придумал. Намного проще (или несколько операторов if)

псевдокод

{
    if ($4 > minLat && $4 < maxLat && $5 > minLon && $5 < maxLon)
    {
        print
    }
}

изменить: на самом деле похоже, что у вас может быть просто опечатка for вместо if? (не совсем, вы удалили бы лишние i= биты и изменили бы печать

for f in ./VBD_npp_d20190[1-5]*.csv; do 
    # TODO: Modify the print to use $4 (and $5 ?) instead of $i
    awk '{if($4>=3.070359 && $4<=40.926137 && $5>=107.159444 && $5<=128.204291){printf "%s ",$i;} print ""}' "$f" > "$f".new;
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...