Копировать столбец B, если столбец E или F пуст или имеет значение 0

Сzsh(и GNU findили совместимо с-delete):

cd -P -- "$CDIR" || exit
old_dirs=(**/*(DNm+6))
find. -mtime +6 ! -type d -delete
empty_old_dirs=($^old_dirs(N^F))
(($#empty_old_dirs == 0)) || rmdir -- $empty_old_dirs

Обратите внимание, что квалификатор glob -mtimeи zsh's mработает с возрастом в целочисленном (округленном вниз )количестве дней. -mtime -6для возраста строго младше 6 лет, -mtime 6для возраста 6 лет (таким образом, между 6 и 7 днями )и -mtime +6для этого возраста строго больше 6, поэтому 7 дней и выше.

Таким образом, для файлов, которым более 7 дней, вам нужен -mtime +6, а не -mtime +7(, по крайней мере, с POSIX-совместимыми реализациями find, не все, но в этом отношении есть GNU ).

-1
14.02.2021, 22:29
2 ответа
$ awk -F, 'BEGIN { OFS = FS } $2 == 0 { $2 = $3 }; 1' user.csv
740.58,740.58,740.58,0,740.58
2452.84,2452.84,2452.84,0,2452.84
898.23,898.23,898.23,0,898.23
227.57,227.57,227.57,0,227.57
735.02,735.02,735.02,0,735.02
640.5,640.5,640.5,0,640.5
469.31,469.31,469.31,0,469.31
3744.25,3744.25,3744.25,0,3744.25
462.15,462.15,462.15,0,462.15
198.79,198.79,198.79,0,198.79
437.58,437.58,437.58,0,437.58
515.44,515.44,515.44,0,515.44

При этом используется awkдля установки второго поля (, столбца )каждой записи (, строки )на значение третьего поля, если числовое значение второго поля равно нулю.

Блок BEGINпросто устанавливает разделитель поля вывода на любой разделитель поля ввода (это запятая, установленная в командной строке с помощью-F).

Замыкающий 1такой же, как { print }, что приводит к безусловной печати каждой записи.


Что касается вашего обновления вопроса :Если вы хотите скопировать столбец 3 в столбец 2, если столбец 2 равен нулю (, как указано выше ), и в то же время скопировать столбец 5 в столбец 4, если столбец 4 равно нулю, приведенный выше код можно легко расширить следующим образом:

awk -F, 'BEGIN { OFS = FS }
    $2 == 0 { $2 = $3 }
    $4 == 0 { $4 = $5 }; 1' user.csv
0
18.03.2021, 22:30
gawk '
  BEGIN {FS = OFS = "\t"}
  !$5 {$5 = $2}
  !$6 {$6 = $2}
  1
' input.tsv

Если вывод выглядит правильно, повторно -выполните с помощьюgawk -i inplace '...' input.tsv

2
18.03.2021, 22:30

Теги

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