использование awk для печати переменной в цикле

Я новичок в работе со скриптом bash. У меня есть файл данных:

i    z    r                    
0   -30   3.5                 
0   -29.5 3.4                 
0   -29   3.6                  
...                             
0    29.5 4.2                  
0    30   4.6                 
1   -30   2.8                  
1   -29.5 3.4                    
....
1    30   5.2
2   -30   2.5
2   -29.5 2.6

И я пытаюсь упорядочить данные в файл следующим образом:

i     z     r
0    -30    3.5
1    -30    2.8
2    -30    2.5
...
0    -29.5  3.4
1    -29.5  3.4
2    -29.5  2.6
...

Я использовал приведенный ниже скрипт, но он не может работать как Я желаю.

awk '{
  for(z=/-30/; z<=30; z+=0.5){
    for(i=0; i<=17489;i++){
      if($1==$i  && $2==$z)
        print $1 $2 $3
    }
  }
}' data.dat >> avg_SD.dat

, пожалуйста, помогите мне! Большое вам спасибо.

1
задан 23 June 2014 в 17:15

1 ответ

От примера и Вашего сценария это кажется, что Ваш исходный файл отсортирован по первому столбцу (i), но Вы хотите, чтобы он был, прежде всего, отсортирован по второму столбцу (z) вместо этого и, чем мной.

Это может быть достигнуто намного легче с sort

tail -n +2 data.dat | sort -n -k 2 -k 1 >> avg_SD.dat

Это также, вероятно, намного быстрее, чем цикличное выполнение через два цикла и выполнение по крайней мере одного миллиона сравнений для каждой строки во входном файле.

Объяснение:

  • tail -n +2 data.dat печать data.dat запуск со второй строки, таким образом удаление заголовка.

  • | перенаправляет вывод команды слева к входу команды справа.

  • sort -n -k 2 -k 1 сортирует вход численно (-n), сначала вторым полем (-k 2) чем первым полем (-k 1)

  • >> avg_SD.dat печатает вывод к avg_SD.dat хранение предыдущего содержания. Если Вы хотите перезаписать предыдущее содержание, используйте сингл > вместо >>.

Если нет никакого заголовка в исходном файле, Вам не нужно tail и может передать data.dat непосредственно к sort как аргумент:

sort -n -k 2 -k 1 data.dat >> avg_SD.dat
3
ответ дан 23 June 2014 в 17:15

Другие вопросы по тегам:

Похожие вопросы: