Problema com a leitura de registros de um arquivo

1

Eu tenho o seguinte problema: Script

#!/usr/bin/ksh

for unitcaseno in 'cat /pims/nigel/UNLOAD-DB/xaa'
do
        echo "String = $unitcaseno"
        unitno='echo $unitcaseno | cut -d'|' -f1'
        caseno='echo $unitcaseno | cut -d'|' -f2'
        echo "Unitno = $unitno:Caseno = $caseno"
break
done

O arquivo é muito grande, então estou quebrando após o primeiro registro.

Sample file:
  349702|            1|
  349702|            1|
  349702|            1|
 1133247|            6|
 1133247|            6|
 12708  |            1|
 12708  |            1|
 299466 |            2|
 299466 |            2|
 299466 |            2|
 299466 |            2|
 501877 |            1|
 501877 |            1|
 55871  |            9|
 55871  |            9|
 64239  |            7|
 64239  |            7|

Saída

String = 349702|
Unitno = 349702:Caseno =

Meu problema é que não está imprimindo o segundo campo na saída.

    
por Nigel B 21.07.2016 / 10:40

1 resposta

4

O problema que você está tendo é com o

for unitcaseno in 'cat /pims/nigel/UNLOAD-DB/xaa'

estrutura. Isso dividirá o arquivo em palavras , não em linhas. É por isso que você vê String = 349702 na saída; você está vendo apenas a primeira palavra e não a linha inteira.

Em vez disso, considere um loop semelhante a

while read unitcaseno
do
  ....
done < /pims/nigel/UNLOAD-DB/xaa

Agora você está processando uma linha por vez

String = 349702|            1|
Unitno = 349702:Caseno =  1

Note que você tem outros problemas; por exemplo, espaço em branco extra antes do Caseno . Mas isso deve levar você ao próximo passo!

    
por 21.07.2016 / 12:39