Imprima o comum dos dois arquivos

0

Eu quero imprimir o comum do arquivo 2

Um arquivo contém a opção ls -l e o outro tem a opção ls

ls tem apenas o nome do arquivo ls -l tem tudo, incluindo a permissão e outras informações.

Existe uma maneira de eles imprimirem a saída do arquivo comum? O comando comm não parece funcionar (imprime tudo)

Eu tentei grep -f file1 file2 , mas nada aparece

digamos que a saída ls -l seja

-rwx------ 1 username 230 date and the filename

ls é

filname

Estou tentando obter o nome de arquivo aka a união do arquivo 2. Eu não acho que há uma maneira de ler o diretório filename no shell

Eu quero o

filename
    
por ricedragon 08.11.2011 / 01:40

2 respostas

1
for i in ls-file; do grep -e $i$ ls-l-file; done

Isso percorre cada linha em ls-file (contendo apenas o comando ls) e atribui a saída a $ i. Em seguida, ele aciona o ls-l-file (contendo o comando ls -l) e procura uma correspondência e gera a saída.

Atualizar

for i in ls-file; do grep -eo $i$ ls-l-file; done

O parâmetro -o só mostrará o texto correspondente, então apenas o nome do arquivo

Atualização 2

while read i; do  grep -oe $i$ ls-l-file; done < ls-file

Isso funciona melhor.

    
por 08.11.2011 / 02:16
0

Você faz parte do caminho até lá.

A primeira coisa que você precisa é extrair apenas os nomes de arquivos do arquivo contendo ls -l output, você pode fazer isso com

awk '{print $9}' < lsl_file

No meu SO, o nome do arquivo é a 9ª coluna, é possível que seja uma coluna diferente na sua.

Observe que comm exige que os dois arquivos sejam classificados. Esse já deve ser o caso da saída de ls e ls -l .

Portanto, o seu one-liner seria:

awk '{print $9}' < lsl_file | comm - ls_file

O argumento de traço único para comunicação diz para usar STDIN.

Suposição importante : isso pressupõe que seus nomes de arquivos não possuam espaços neles.

    
por 08.11.2011 / 02:07

Tags