2014-11-18 4 views
0

У меня есть плоский файл, который содержит следующуюКак написать массиву вывод команды awk в UNIX?

INDIA USA SA NZ AUS ARG GER BRA 

так есть восемь колонн в целом. Теперь я хочу сохранить индексы только тех столбцов, которые начинаются с A в массив. Для этого я попробовал следующее заявление

awk '{for(i=1;i<=NF;i++){if($i~/^A/){set -A newArray $i}}}' testUnix.txt 

когда эхо-файл, используя

echo "${newArray[*]}" 

это печать 5 6, но всякий раз, когда я пытаюсь получить длину этого массива

echo ${#newArray[@]} 

его длина отображается только как 1. Разве это не должно быть 2? Я также попытался

awk '{y = 0;for(i=1;i<=NF;i++){if($i~/^A/){newArray[y] = $i ; y++}}}' testUnix.txt 

, но и это производит один и тот же результат. Что мне не хватает? Пожалуйста, объясните. Я намерен получить требуемый выход 2.

+1

«newArray» в awk и bash - это два разных объекта. Поэтому, когда вы набираете 'echo '$ {newArray [*]}" 'его значение массива bash, вы получаете – nu11p01n73R

+1

. Должен сказать - я думаю, что здесь такие вещи, как Perl или Python, начинают входить сами. – Sobrique

ответ

1

Нет необходимости в awk. Вы можете перебрать элементы и проверить, если они начинаются с A:

r="INDIA USA SA NZ AUS ARG GER BRA" 
arr=() 
for w in $r 
do 
    [[ $w == A* ]] && arr+=("$w") 
done 

Если выполнить это то arr массив содержит:

$ for i in "${arr[@]}"; do echo "$i"; done 
AUS 
ARG 

И чтобы подтвердить, что это имеет два элемента, давайте считать их :

$ echo "${#arr[@]}" 
2 

Что происходит с вашим ПОДХОД?

awk '{for(i=1;i<=NF;i++){if($i~/^A/){set -A newArray $i}}}' testUnix.txt 

это говорит set -A newArray, но это на самом деле не определяя переменную в Баш, потому что вы в AWK.

1

Что бы я сделал, чтобы иметь массив Баш:

bash_arr=($(awk '{for(i=1;i<=NF;i++){if($i~/^A/){print $i}}}' file)) 
echo "${bash_arr[@]}" 
AUS ARG 

И вам даже не нужно AWK в действительности, Баш способен делать регулярное выражение:

for word in $(<file); do [[ $word =~ ^A ]] && basharr+=("$word"); done 
+0

длина до сих пор 1 :( – StrugglingCoder

+0

??? В чем проблема? У вас есть два найденных элемента. Не знаю, что случилось. Индекс начинается с нуля! –

Смежные вопросы