alterar coluna com script awk

0

Estou tentando criar um script B que use outro script A para alterar uma coluna específica em uma linha específica. No entanto, quando eu executo o script A sozinho, ele funciona perfeitamente. Mas quando tento usar o script B (permitindo-me executar o script A em outros diretórios), ele altera a linha inteira e não a coluna específica.

Qual é o problema?

script A ( 0.MOF.run ):

#!bin/sh
echo $pot
mkdir u$pot  
cp u6000/towhee_input u$pot 
cd u$pot
mv towhee_input 1
awk < 1 -v k="-$pot.0" 'NR==12 {$2=k}{print}' > towhee_input   
cd ..

script B:

#!bin/sh
echo -n "Please Incert the Number of Potencials: "
read c
declare -i b
b=$c+1
rm pot_pid
a=1

while [ $a -lt $b ]
do
   pot=$(awk < data -v k="$a" 'NR==k ')

   . 0.MOF.mkdir
   . 1.MOF.run

   a='expr $a + 1'   
done
    
por Joao Macau 19.05.2014 / 13:59

1 resposta

1

Como eu disse no meu comentário, não consigo reproduzir seu problema. Se você nos fornecer os dados necessários para o teste, atualizarei isso, mas enquanto isso, aqui está uma maneira mais simples de escrever o que você tem até agora:

#!/usr/bin/env bash

## Write a function instead of calling
## an external script. You could also make
## 0.MOF.mkdir a function.
MOF_run() {
    echo "a.sh pot is $pot"
    ## The -p will cause mkdir to fail
    ## silently if the directory exists.
    mkdir -p u$pot  

    ## Run the awk on the target file, no need to cd or copy
    awk < u6000/towhee_input -v k="-$pot.0" 'NR==12 {$2=k}{print}' > u$pot/towhee_input   
}


echo -n "Please Insert the Number of Potentials: "
read c
## Make sure the user entered a number
## and not anything else or an empty string.
while [[ -z $c || ! $c =~ ^[0-9]*$ ]]; do
    echo "Please enter a number."
    echo -n "Please Insert the Number of Potentials: "
    read c
done;
## increase c by one
let c++

rm pot_pid
a=1

while [ $a -lt $c ]
do
   pot=$(awk < data -v k="$a" 'NR==k ')
   echo "b.sh pot is $pot";
   . 0.MOF.mkdir
   ## Call the MOF_run function
   MOF_run

   ## increment $a
   let a++;
done
    
por 19.05.2014 / 15:51

Tags