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-playbook
no lee de forma predeterminada su flujo de entrada estándar, ya que espera un nombre de archivo. Al darle /dev/stdin
como nombre de archivo y luego proporcionar el documento aquí -en la entrada estándar, elude esta restricción en la utilidad. El "archivo" /dev/stdin
siempre contendrá el flujo de datos de entrada estándar del proceso actual.
ruby
y 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, cat
abre 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
, cat
simplemente 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.
Вы можете попробовать:
awk '{key = $4 < $7 ? $4 SUBSEP $7 : $7 SUBSEP $4} !seen[key]++' file
В нем хранится минимум, необходимый для удаления повторяющихся записей.
!seen[key]++
— «известная» идиома awk для печати записи только в первый раз, когда «ключ» виден.
Вы можете упорядочить тройки столбцов 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
для удаления дубликатов (, но вам нужно указать особый регистр имен столбцов ).
Уверенность в каждой строчке:
от 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