AWK / sed — записать текст в текстовый файл перед числом, которое меньше определенного значения

#awk #sed #text-processing

#awk #sed #обработка текста

Вопрос:

У меня есть текстовый файл. В этом текстовом файле у меня есть числа от наименьшего до наибольшего. Пример ввода

 [  Index 1  ]
1628 5704
32801 61605
71508 90612
102606
  

Я хочу разделить этот файл на две группы разделов, в первом у меня будут числа от 1 до 58050, во втором у меня будут числа от 58051 до 116100, поэтому, когда мой скрипт найдет число, которое больше 58050, эта программа напишет [Индекс 2]

Ожидаемый результат

 [  Index 1  ]
1628 5704
32801 
[  Index 2  ]
61605
71508 90612
102606
  

У вас есть какие-либо идеи?

Ответ №1:

С вашими показанными примерами, не могли бы вы попробовать следующее.

 awk '
/^[/{ next }
{
  for(i=1;i<=NF;i  ){
    if($i>=1 amp;amp; $i<=58050){
      tempfirstGroup=(tempfirstGroup?tempfirstGroup OFS:"")$i
    }
    if($i>=58051 amp;amp; $i<=116100){
      tempsecondGroup=(tempsecondGroup?tempsecondGroup OFS:"")$i
    }
  }
  if(tempfirstGroup){
      firstGroup=(firstGroup?firstGroup ORS:"")tempfirstGroup
  }
  if(tempsecondGroup){
      secondGroup=(secondGroup?secondGroup ORS:"") tempsecondGroup
  }
  tempsecondGroup=tempfirstGroup=""
}
END{
  print "[  Index 1  ]" ORS firstGroup ORS "[  Index 2  ]" ORS secondGroup
}
' Input_file
  

Вывод будет следующим.

 [  Index 1  ]
1628 5704
32801
[  Index 2  ]
61605
71508 90612
102606
  

Комментарии:

1. Это работает отлично, большое вам спасибо. У вас отличные навыки программирования.