Analisando um arquivo com várias condições

1

Eu quero criar um script para analisar um arquivo. Estes são o que eu preciso fazer;

  1. Quero usar apenas a primeira linha de todos os aplicativos. Eu quero verificar apenas as colunas 1,3,4. Se um aplicativo tiver mais do que uma Instância, quero apenas o primeiro. Para exp. O THSMOB11 será escolhido, mas o THSMOB12 será comentado. THSINT11 escolheu THSINT12 comentado.
  2. Eu quero adicionar "#" na frente das outras linhas que não quero usar.

Exemplo de texto

App Name                        Channel     Folder      Instance
ThisServicesBusiness            This        Thisbcr1    THSMOB11
ThisServicesBusiness            This        Thisbin1    THSINT11
ThisServicesBusiness            This        Thisbbr1    THSBRC11
ThisServicesBusiness            This        Thisbot1    THSIVR11
ThisServicesBusiness            This        Thisadm1    THSWS11 
ThisServicesBusiness            This        Thisbcr1    THSMOB12
ThisServicesBusiness            This        Thisbin1    THSINT12
ThisServicesBusiness            This        Thisbbr1    THSBRC12
ThisServicesBusiness            This        Thisbbr1    THSBRC13

Eu comecei com este código.

#!/bin/ksh

while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Text read from file: $line"
done < "$1"

Resultado esperado;

ThisServicesBusiness            This        Thisbcr1    THSMOB11
ThisServicesBusiness            This        Thisbin1    THSINT11
ThisServicesBusiness            This        Thisbbr1    THSBRC11
ThisServicesBusiness            This        Thisbot1    THSIVR11
ThisServicesBusiness            This        Thisadm1    THSWS11 
#ThisServicesBusiness           This        Thisbcr1    THSMOB12
#ThisServicesBusiness           This        Thisbin1    THSINT12
#ThisServicesBusiness           This        Thisbbr1    THSBRC12
#ThisServicesBusiness           This        Thisbbr1    THSBRC13
    
por Hüseyin Erkmen 25.01.2018 / 12:48

1 resposta

3

Awk é mais adequado para esse caso:

awk 'a[$1]++{ $0="#"$0 }1' file
  • a[$1]++{ $0="#"$0 } - array associativo a conterá o número de ocorrências para cada "nome do aplicativo" (apresentado pelo primeiro campo $1 ) usando "nome do aplicativo" como chave de matriz. A partir da segunda ocorrência, todo o registro $0 será prefixado com # char

A saída:

App1 Channel1 Name1 Folder1
#App1 Channel1 Name2 Folder1
App2 Channel1 Name1 Folder1
#App2 Channel1 Name1 Folder1
App3 Channel1 Name1 Folder1
App4 Channel1 Name1 Folder1
#App1 Channel2 Name1 Folder1
#App1 Channel3 Name1 Folder1
#App1 Channel1 Name1 Folder2
    
por 25.01.2018 / 13:01