Usando Cut dentro de um script para cortar uma coluna de uma String específica

0

Eu tenho este arquivo chamado viagens.txt:

2018-10-01:88020:88013:6:4.2
2018-10-01:88020:88014:8:3.8

Eu quero criar um script que, em cada linha, verifique a segunda coluna (nesse caso, em ambos os casos, ele retornará "88020").

No entanto, no momento, não consigo filtrar para obter esse número na segunda coluna. Eu tenho este código:

#!/bin/bash
fich=viagens.txt
condutores=condutores.txt
if [ -f $fich ];then
    for f in $(cat $fich); do
        condutor=$(cut -f2 $f)
        echo $condutor
    done
else
    echo "Ficheiro nao existe"
fi

Eu também tentei

#!/bin/bash
fich=viagens.txt
condutores=condutores.txt
if [ -f $fich ];then
    for f in $(cat $fich); do
        condutor=$(cat $f | cut -d' ' -f2)
        echo $condutor
    done
else
    echo "Ficheiro nao existe"
fi

O que estou fazendo de errado?

Obrigado antecipadamente.

    
por João Costa 06.10.2018 / 00:21

2 respostas

1

Em ambos os seus scripts, você usa cut em um arquivo cujo nome é lido no arquivo viagens.txt . Você deve obter um erro No such file or directory dos dois scripts (lembre-se de incluir sempre erros na pergunta).

Em vez disso:

#!/bin/bash

fich=viagens.txt

if [ ! -f "$fich" ]; then
    echo "Ficheiro nao existe" >&2
    exit 1
fi

cut -d : -f 2 <"$fich" |
while read data; do
    printf 'Data read: %s\n' "$data"
done

O cut -d : -f 2 retornará o segundo campo : -delimited da entrada para cut .

Ou, se você quiser apenas enviar a coluna:

#!/bin/bash

fich=viagens.txt

if [ ! -f "$fich" ]; then
    echo "Ficheiro nao existe" >&2
    exit 1
fi

cut -d : -f 2 <"$fich"
    
por 06.10.2018 / 00:30
0

Que tal - não suportando uma verificação prévia da existência do arquivo - lendo as linhas do arquivo em uma matriz, com IFS definido como : e imprimindo o segundo elemento?

IFS=:
while read -a TARR; do echo ${TARR[1]}; done < viagens.txt
88020
88020

Não se esqueça de definir IFS de volta ao seu valor original.

    
por 06.10.2018 / 12:45