αԋɱҽԃ αмєяιcαη Asked: 2018-06-05 01:16:13 +0800 CST2018-06-05 01:16:13 +0800 CST 2018-06-05 01:16:13 +0800 CST sed remove linha com base na escolha de um campo específico 772 Entrada: coupon,11/2018,1 voucher,04/2018,2 Resultado: coupon,11/2018,1 Eu gostaria de remover as linhas do arquivo grande onde o mm/ano está 11/2018em$2 awk sed 2 respostas Voted Best Answer Kusalananda 2018-06-05T01:23:15+08:002018-06-05T01:23:15+08:00 $ awk -F '[,/]' '($3 == 2018 && $2 >= 11) || $3 > 2018' file coupon,11/2018,1 Tratando a entrada como delimitada por vírgulas ou barras, o segundo campo da entrada será o mês e o terceiro campo será o ano. O awkprograma imprime a entrada se o ano for 2018 e o mês for maior ou igual a 11, ou se o ano for maior que 2018. Fazer isso com sedenvolveria ter que determinar se a data é anterior ou posterior a novembro de 2018 usando expressões regulares. Isso não é trivial. Uma expressão regular que corresponde a qualquer número inteiro de 4 dígitos maior que 2018: [3-9][0-9]{3}|2[1-9][0-9]{2}|20[2-9][0-9]|2019 ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^ 3000-9999 2100-2999 2020-2099 Assim o sedcomando se torna $ sed -n -E '\#(1[12]/2018)|([01][0-9]/([3-9][0-9]{3}|2[1-9][0-9]{2}|20[2-9][0-9]|2019))#p' file coupon,11/2018,1 RomanPerekhrest 2018-06-05T01:33:57+08:002018-06-05T01:33:57+08:00 Abordagem GNU awk: Arquivo de amostra: coupon,11/2018,1 voucher,04/2018,2 a,31/2016,b aa,02/2019,bb awk -v d=$(date +%s -d"11/01/2018") \ -F',' '{ split($2, a, "/") }mktime(sprintf("%d %d 01 00 00 00", a[2], a[1])) >= d' file A saída: coupon,11/2018,1 aa,02/2019,bb
Tratando a entrada como delimitada por vírgulas ou barras, o segundo campo da entrada será o mês e o terceiro campo será o ano.
O
awk
programa imprime a entrada se o ano for 2018 e o mês for maior ou igual a 11, ou se o ano for maior que 2018.Fazer isso com
sed
envolveria ter que determinar se a data é anterior ou posterior a novembro de 2018 usando expressões regulares. Isso não é trivial.Uma expressão regular que corresponde a qualquer número inteiro de 4 dígitos maior que 2018:
Assim o
sed
comando se tornaAbordagem GNU
awk
:Arquivo de amostra:
A saída: