Я хочу найти сотрудника, который работает последние 3 года [закрыто]

Esto se puede hacer confind(y xargs), pero no ganará ningún concurso de belleza.

Escriba un script llamadocheck_files:

#!/bin/sh
find "$@" -size +800M –print

Luego ejecute

xargs -d '\n' < xyz/symlinks_paths.txt./check_files

donde

  • Puede mover < xyz/symlinks_paths.txtredirección hasta el final de la línea de comando, como en xargs -d '\n'./check_files < xyz/symlinks_paths.txt, o al principio, o en cualquier otro lugar. O puede reemplazarlo con -a xyz/symlinks_paths.txt. Cualquiera de estos significa que xargsleerá de xyz/symlinks_paths.txt.
  • Puede reemplazar ./check_filescon un nombre de ruta absoluto a su script check_files.

-d '\n'significa usar nueva línea como delimitador al leer xyz/symlinks_paths.txt. Probablemente puedas dejar esto fuera si sus nombres de archivo no contienen espacios en blanco (espacio (s )o tabulador (s )), comillas (recuerda que una comilla simple(')es el mismo carácter que un apóstrofo )o barras invertidas, y estás dispuesto a apostar el salario de un año a que nunca lo harán.

Esto lee cada línea del archivo y lo convierte en un argumento para el script check_files, que los pasa afindcomo punto de partida -argumentos . Mucha gente sabe que puedes correr findcon múltiples argumentos que comienzan -punto ; por ejemplo,

find dir1 dir2 dir3  search-expression

No es tan conocido que esos argumentos no tienen por qué ser directorios; pueden ser archivos; por ejemplo,

find file1 file2 file3  search-expression

(o una combinación de directorios y archivos ). findsimplemente aplicará la expresión a cada archivo nombrado como un punto inicial -.

Esto comprueba cada archivo cuyo nombre aparece en xyz/symlinks_paths.txtpara ver si su tamaño es de 800M o más, e imprime los que lo son.

Si los nombres de archivo pueden hacer referencia a enlaces simbólicos (como sugiere el nombre xyz/symlinks_paths.txt)y quieres mirar el apuntado -a los archivos (que seguramente haces ), cambie finda find -L.

No necesita tener un script check_filesseparado; puedes hacer

xargs -d '\n' < paths.txt sh -c 'find "$@" -size +800c -print' sh

Nuevamente, cambie finda find -Lsi lo desea.

-3
12.02.2019, 13:48
2 ответа

Предположим, что файл, содержащий ваши данные, называется входным:

cut -d '~' -f 5 input | cut -c 1-4

Выход:

1980
1981
1981
1981
1981
1981
1981
1982
1981
1981
0
28.01.2020, 05:19

Я попытался составить awk-команду со сравнением дат. Попробуйте один из этих -на основе вашей даты (1):

  • Дата BSD

    awk -F'~' '$5 <= '$(date -v-3y +%Y%m%d)'{print $2,$3}' file
    
  • GNU (Linux )дата

    awk -F'~' '$5 <= '$(date -d '3 years ago' +%Y%m%d)'{print $2,$3}' file
    
1
28.01.2020, 05:19

Теги

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