удалить повторяющиеся строки

Un documento aquí -es una redirección a la entrada estándar de un comando, al igual que <. Esto significa que en cualquier lugar donde pueda usar <para redirigir el contenido de un archivo, puede redirigir el contenido de un documento aquí -. El estándar POSIX enumera aquí -documentos junto con los otros operadores de redirección .

En su ejemplo de Ansible, ansible-playbookno lee de forma predeterminada su flujo de entrada estándar, ya que espera un nombre de archivo. Al darle /dev/stdincomo nombre de archivo y luego proporcionar el documento aquí -en la entrada estándar, elude esta restricción en la utilidad. El "archivo" /dev/stdinsiempre contendrá el flujo de datos de entrada estándar del proceso actual.

rubyy awk, así como muchas otras utilidades, leerán la entrada estándar a menos que se proporcione un nombre de archivo en la línea de comando.

Entonces, está técnicamente equivocado cuando dice "Parece que el shell piensa que el heredoc es un archivo con un contenido igual al valor del heredoc". No actúa como un archivo (con respecto a tener un nombre de archivo y ser buscable ), sino como un flujo de datos en la entrada estándar. Al menos desde el punto de vista de la utilidad.

La diferencia es la misma que entre

cat file

y

cat 

En la primera instancia, catabre el archivo file, pero en la segunda (que es también lo que sucede con un documento here -), ya que no se dio ningún nombre de archivo como argumento para cat, catsimplemente lee su flujo de entrada estándar (y shell abre el archivo, o proporciona el documento aquí -, en la entrada estándar a la utilidad ). La utilidad no necesita saber si los datos proporcionados provienen de un archivo, una canalización, un documento aquí -o alguna otra fuente de datos.

Cómo aquí -los documentos son implementados por el shell es de alguna manera poco importante, pero puede ser a través del uso de un FIFO o incluso con un archivo temporal.

0
01.04.2019, 18:28
3 ответа

Вы можете попробовать:

awk '{key = $4 < $7 ? $4 SUBSEP $7 : $7 SUBSEP $4} !seen[key]++' file

В нем хранится минимум, необходимый для удаления повторяющихся записей.

!seen[key]++— «известная» идиома awk для печати записи только в первый раз, когда «ключ» виден.

2
28.04.2021, 23:35

Вы можете упорядочить тройки столбцов 2 -3 -4 и 5 -6 -7 по значению в первом столбце:

perl -lane '@F[1,2,3,4,5,6] = @F[4,5,6,1,2,3] if $F[1] > $F[4]; print "@F"'

Затем вы можете просто запустить sort -uдля удаления дубликатов (, но вам нужно указать особый регистр имен столбцов ).

0
28.04.2021, 23:35

Уверенность в каждой строчке:

  • нет места до первого поля
  • 1 пробел между полями
  • нет пробела в последнем поле

от gnu sed, ваши данные в файле 'data';

sed -nE ':s G;/(\w+\s)(\w+\s)(\w+\s)(\S+\s)(\w+\s)(\w+\s)(\S+\s)(\w+)\n(.+\n)*\1\w+\s\6\7\w+\s\3\4\8/b; h;P' data
0
28.04.2021, 23:35

Теги

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