Para chamar um script para cada valor na coluna # 4, você pode usar algo assim:
awk '{system("./your_script.sh " $4)}' inputfile
Eu estou tentando fazer um loop através de um arquivo chamado file.txt que contém um monte de lixo e uma coluna (coluna # 4) que eu estou interessado. Eu quero que este loop seja executado de 0 a eof. Para cada valor na coluna 4, quero chamar outro script.
Para chamar um script para cada valor na coluna # 4, você pode usar algo assim:
awk '{system("./your_script.sh " $4)}' inputfile
Ainda outra versão como poderia ser feito, desta vez apenas com builtins de shell:
while read line ; do
set $line
echo $4
done <filename
Substitua echo
pelo seu script.
Estou assumindo que suas colunas estão separadas por espaço em branco.
for value in $(cat file.txt | tr -s ' ' | cut -d ' ' -f4); do
./my_script.sh $value
done
Explicação:
tr -s ' '
squelches espaços consecutivos para que as colunas sejam separadas por espaço único cut -d ' ' -f4
usa espaço único como delimitador para escolher a quarta coluna Surpreende-me que ninguém tenha mencionado xargs
, porque esse é precisamente o propósito de xargs
fornecer valores gerados pelo comando anterior para outra coisa. Podemos combinar essa propriedade com a capacidade de awk
de imprimir colunas. Abaixo está uma amostra de demonstração. Você pode substituir printf "Hello %s\n"
part por seu script
xieerqi@eagle:~$ df > testFile.txt
xieerqi@eagle:~$ awk '{print $4}' testFile.txt | xargs -I {} printf "Hello %s\n" {}
Hello Available
Hello 26269816
Hello 4
Hello 2914488
Hello 584064
Hello 5120
Hello 2827976
Hello 102324
sed 1d $outfile1 | while read "column on file" do
done