Использование переменной, определенной внутри AWK - PullRequest
0 голосов
/ 03 декабря 2011

У меня работает этот кусок скрипта. Это - это то, что я хотел:

ввод

3.76023 0.783649 0.307724 8766.26   
3.76022 0.764265 0.307646 8777.46   
3.7602 0.733251 0.30752 8821.29   
3.76021 0.752635 0.307598 8783.33   
3.76023 0.79528 0.307771 8729.82   
3.76024 0.814664 0.307849 8650.2   
3.76026 0.845679 0.307978 8802.97   
3.76025 0.826293 0.307897 8690.43  

со скриптом

!/bin/bash 

awk -F ', ' ' 
{

    for (i=3; i<=10; i++) {
        if (i==NR) {
        npc1[i]=sprintf("%s", $1);
        npc2[i]=sprintf("%s", $2);
        npc3[i]=sprintf("%s", $3);
        npRs[i]=sprintf("%s", $4);
        print npc1[i],npc2[i],\
        npc3[i], npc4[i];
        }
    }
} ' p_walls.raw 

echo "${npc1[100]}"

Но теперь я не могу использовать эти массивы npc1[i], за пределами awk. Это последнее эхо ничего не печатает. Возможно ли это или я что-то упустил?

Ответы [ 2 ]

2 голосов
/ 03 декабря 2011
  • AWK - это отдельный процесс, после его завершения все внутренние данные исчезают.Это верно для всех внешних процессов / команд.Bash видит только то, чего касаются встроенные команды bash.
  • i никогда не равен 100, так почему вы хотите получить доступ к npc1[100]?
  • Что вы действительно пытаетесь сделать?Если вы перепишите вопрос, мы сможем помочь ...
1 голос
/ 03 декабря 2011

(Вишня на торте всегда хороша!)

Извините, но все ответы @yi_H и комментарии выше верны.

Но на самом деле нет проблем с загрузкой 2 наборов данных в 2 отдельных массива в awk, т. Е.

awk '{
  if (FILENAME == "file1") arr1[i++]=$0 ; 
  #same for file2; } 
 END {
      f1max=++i; f2max=++j;
      for (i=1;i<f1max;i++) {
        arr1[i] 
        # put what you need here for arr1 processing 
        #
        # dont forget that you can do things like
        if (arr1[i] in arr2) { print arr1[i]"=arr2[arr1["i"]=" arr2[arr1[i]] }
      }
      for j=1;j<f2max;j++) {
        arr2[j] 
        # and here for arr2
      }
 }' file1 file2 

Вам нужно будет заполнить фактическую обработку для arr1 [i] и arr2 [j].

Кроме того, получите книгу по выходным на выходные и будьте готовы к понедельнику. Это просто. Вы, вероятно, можете понять это с grymoire.com/Unix/awk.html

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...