удалить всю строку после определенной даты - PullRequest
0 голосов
/ 08 февраля 2019

У меня много * .csv файлов.Я хочу удалить контент после определенной строки.Я удалю все строки после 20031231 Как решить эту проблему с некоторыми строками сценария оболочки?

Test,20031231,000107,0.74843,0.74813
Test,20031231,000107,0.74838,0.74808
Test,20031231,000108,0.74841,0.74815
Test,20031231,000108,0.74835,0.74809
Test,20031231,000110,0.74842,0.74818

Test,20040101,000100,0.73342,0.744318

Ответы [ 5 ]

0 голосов
/ 09 февраля 2019

С awk, пожалуйста, попробуйте:

awk -F, '$2<=20031231' input.csv
0 голосов
/ 08 февраля 2019

с Миллером (http://johnkerl.org/miller/doc/)

mlr --nidx --fs "," filter '$2>20031231' input

дает вам

Test,20040101,000100,0.73342,0.744318
0 голосов
/ 08 февраля 2019

Если вы хотите использовать сценарий оболочки, лучше всего использовать awk.Это поможет:

awk 'BEGIN {FS=","} {if ($2 == "20031231") print $0}' input.csv > output.csv

Этот код будет записывать в другой файл только те строки, которые имеют 20031231.

0 голосов
/ 08 февраля 2019

игнорирует пустые строки и несопоставленные данные

файл awk:

$ cat awk.awk 
{
    if($2<="20031231" && $0!=""){
        print $0
    }else{
        next
    }
}

исполнение:

$ awk -F',' -f awk.awk input 
Test,20031231,000107,0.74843,0.74813
Test,20031231,000107,0.74838,0.74808
Test,20031231,000108,0.74841,0.74815
Test,20031231,000108,0.74835,0.74809
Test,20031231,000110,0.74842,0.74818

один вкладыш:

$ awk -F',' '{if($2<="20031231" && $0!=""){print $0}else{next}}' input
Test,20031231,000107,0.74843,0.74813
Test,20031231,000107,0.74838,0.74808
Test,20031231,000108,0.74841,0.74815
Test,20031231,000108,0.74835,0.74809
Test,20031231,000110,0.74842,0.74818
0 голосов
/ 08 февраля 2019

быстро и грязно, но без какой-либо другой информации об ограничении

sed '1,/20031231/p;d' YourFile
...