Разделить файл CSV на основе поля даты

Суть в том, что 0означает «истина», а1(или любое другое не-нулевое значение )означает «ложь».

В оболочке верный тест (или успешно завершенная программа ),завершается с кодом 0. Тест [[ -z "$VAR" ]]возвращает нулевой код (истина ), если $VARпуст, или один (ложь ), если он не пуст:

$ var=""; [[ -z "$var" ]]; echo $?
0
$ var="NOT EMPTY"; [[ -z "$var" ]]; echo $?
1

В итоге, если $VARне -пусто, то [[ -z "$VAR" ]]ложно, (возвращает1)и оператор thenне выполняется.

Предполагалось ли, что тест будет возвращать значение true, если переменная не была -пустой? Если да, замените -zна -n:

.
$ var=""; [[ -n "$var" ]]; echo $?
1
$ var="NOT EMPTY"; [[ -n "$var" ]]; echo $?
0

Для краткости тот же тест выполняется, если -nопущен:

$ var=""; [[ "$var" ]]; echo $?
1
$ var="NOT EMPTY"; [[ "$var" ]]; echo $?
0
2
10.05.2020, 15:40
2 ответа

Чтобы напечатать строку заголовка ни в одном выходном файле:

$ awk -F, 'NR>1{print > ($2+0)}' file

$ cat 2019
56777decb012d60f36f9cd4b9acfe13215f670bbe192f261db21e64f98e212be,2019-05-08 13:39:39 UTC,1AMtkH4riMpxSe7s6h2aaDXVdxnmMFy
f5a1d52f013f1ee49a6cad971a5782c1c9905030d35ac28e23a2113fd1941421,2019-04-10 18:36:01 UTC,1LBBNap7kLswvgYfLeskAfEMToiinkB

$ cat 2020
1b8fb81b9c4db4cf3659d2553e7c1d5a4dac21400e331ea3deecdfa45e2eb7d7,2020-05-08 13:43:38 UTC,32UNEwo4UtXrD8xDGapBcWQ9B7HBQNb
daeac50f989f0d31bcc412ca47e2e082f7d0599d8e577a9a310f7ab4e9d474d2,2020-05-08 13:21:33 UTC,3BMEXPLQqB9rkR5JdA4Xm98ntT5xuw8

или распечатать его в обоих выходных файлах:

$ awk -F, 'NR==1{hdr=$0; next} {out=($2+0); if (!seen[out]++) print hdr > out; print > out}' file

$ cat 2019
hash,block_timestamp,addresses
56777decb012d60f36f9cd4b9acfe13215f670bbe192f261db21e64f98e212be,2019-05-08 13:39:39 UTC,1AMtkH4riMpxSe7YMbs6h2aaDXVdxnmMFy
f5a1d52f013f1ee49a6cad971a5782c1c9905030d35ac28e23a2113fd1941421,2019-04-10 18:36:01 UTC,1LBBNap7kLswvgYbzmfLeskAfEMToiinkB

$ cat 2020
hash,block_timestamp,addresses
1b8fb81b9c4db4cf3659d2553e7c1d5a4dac21400e331ea3deecdfa45e2eb7d7,2020-05-08 13:43:38 UTC,32UNEwo4UtXrD8xjAVDGapBcWQ9B7HBQNb
daeac50f989f0d31bcc412ca47e2e082f7d0599d8e577a9a310f7ab4e9d474d2,2020-05-08 13:21:33 UTC,3BMEXPLQqB9rkR5SMhJdA4Xm98ntT5xuw8
0
28.04.2021, 23:15

Похоже, вы используете <=вместо<:

BEGIN {
   FS = ","
}
{
   s1 = substr($2, 1, 4)
   if (s1 < 2020) {
      print > 2019
   } else {
      print > 2020
   }
}
1
28.04.2021, 23:15

Теги

Похожие вопросы