Dividindo colunas e enviando o valor como stdin para um programa separado dentro de um script [closed]

0

Atualmente, tenho dois programas escritos em C chamados "remover" e "calcular".

Quando eu chamo ./remove, ele remove alguns dados do stdin. Quando eu chamo ./calculate que leva em um argumento e também dados de stdin e calcula e retorna um valor.

Atualmente, está escrevendo um script que chama esses dois programas.

Eu chamo meu script com o seguinte:

./calc.sh input.txt 2 3 4 5

onde input.txt possui:

abcd:1,2:3,4
efgh:5,4:4,4
hijk:3,1:4,9

Executando o programa ./remove retorna

abcd:1,2:3,4
efgh:5,4:4,4

Meu script está atualmente:

./remove "$1" | ./calculate "$1" "$2" "$3" "$4" < awk -F ':,' '

Como faço para corrigir o script para que eu selecione os valores das colunas de números inteiros retornados do programa ./remove e envie-o linha por linha em ./calculate como stdin junto com "2 3 4 5" com argumentos?

    
por Kadana Kanz 01.04.2015 / 05:29

2 respostas

2

Se eu entendi o seu objetivo corretamente, você está um pouco perto. Experimente

#!/bin/sh
filename=$1
shift
./remove "$filename" | awk -F '[:,]' '{print $2, $3, $4, $5}' | ./calculate "$@"

Você precisa dizer -F '[:,]' porque cada separador de campo é um : ou , . awk -F ':,' espera que o separador de campo seja a string :, , como em

field1:,field2:,field3

O comando shift remove $1 (que é o nome do arquivo, input.txt ) da lista de argumentos, deixando "$@" para expandir como 2 , 3 , 4 e 5 .

    
por 01.04.2015 / 06:24
0

tente

./remove $1 |  awk -F '[:,]' '{ printf "./calculate %d %d %d %d\n",$2,$3,$4,$5 }' | bash

onde

  • awk gerará linha de comando para stdout
  • e dê a bash (ou qualquer shell)

você pode testar simplesmente executando

./remove $1 |  awk -F '[:,]' '{ printf "./calculate %d %d %d %d\n",$2,$3,$4,$5 }'

No entanto,

When I call ./calculate which takes in an argument and also data from stdin and calculates and returns a value.

você pode explicar qual entrada deve ser dada a ./calculate ? Na construção acima, suponho que não use cálculo de entrada.

    
por 01.04.2015 / 09:39