2015-10-29 4 views
0

У меня возникла проблема с индексированием переменной (состоящей из 1 строки с 4 значениями), полученной из текстового файла с awk.Переменная индексации, созданная awk в bash

В частности, у меня есть текстовый файл, содержащий всю входную информацию для цикла. Каждая строка содержит 4 специальных входных значения, и каждая итерация использует другую строку входного файла.

входного файла выглядит следующим образом:

/home/hannelore/TVB-pipe_local/subjects/CON02T1/ 10012 100000 1001 --> used for iteration 1 
/home/hannelore/TVB-pipe_local/subjects/CON02T1/ 10013 7200 1001 --> used for iteration 2 
... 

Из этого текстового файла ввода, я определил различные столбцы (путь, семена, граф, цель), а затем я хотел бы проиндексировать эти переменные в каждой итерации петля. Однако индекс 0 возвращает всю переменную, а более высокие индексы возвращаются без вывода. Используя awk, cut или IFS для этой полученной переменной, я не смог разделить переменную. Кто-нибудь может мне с этим помочь?

Некоторый код, который я использовал:

seed=$(awk '{print $2}' $input_file) 

- информация столбца> Выписка из входного файла, это работает

seedsplit=$(awk '{print $2}' $seed) 

seedsplit=$(cut -f2 -d ' ' $seed)" 

Спасибо заранее!

С наилучшими пожеланиями,

Ханнелорой

+1

Я не понимаю, что вы делаете в назначениях 'seedplit'. Второй аргумент 'awk' - это имя файла, но' $ seed' содержит все значения из поля 2 входного файла. – Barmar

+0

Не хватает информации. Какие файлы находятся в этих местах пути? Что они содержат и что вы пытаетесь извлечь из них? –

+0

Какую переменную вы пытаетесь индексировать? Я не вижу никаких массивов в вашем коде. – Barmar

ответ

0

Если я вас правильно понял вы хотите, чтобы извлечь значения из входного файла построчно.

while read a b c d; do echo "var1:" ${a}; done < file 

напечатает

var1: /home/hannelore/TVB-pipe_local/subjects/CON02T1/ 
var1: /home/hannelore/TVB-pipe_local/subjects/CON02T1/ 

так же вы можете получить доступ к другим переменным в B, C и D.

0

Если вы хотите массив, а затем использовать массив обозначения присваивания:

seed=($(awk '{print $2}' $input_file)) 

Теперь вы будете иметь слова из каждой строки вывода из awk в отдельный элемент массива.

col1=($(awk '{print $1}' $input_file)) 
col3=($(awk '{print $3}' $input_file)) 

Теперь у вас есть три массива, которые могут быть проиндексированы параллельно.

for i in $(seq 1 "${#col1[@]}" 
do 
    echo "${col1[$i]} in col1; ${seed[$i]} in col2; ${col3[$i]} in col3" 
done