Распечатать файл с самого начала, пока в 3-м столбце не будет найден узор. - PullRequest
0 голосов
/ 28 мая 2020

В конце третьего столбца есть три числа, которые начинаются с 1.0, как я могу напечатать все строки с начала до тех пор, пока не будет найдено первое из этих трех чисел (оно выделено жирным шрифтом ниже)? есть ли простое однострочное решение с awk или sed?

-80.2743682     -8.6420053      0
-80.2740679     -8.6418526      0.0371169854015
-80.2737584     -8.641709       0.0747022394455
-80.2734489     -8.6415562      0.112728651431
-80.2731395     -8.6414126      0.150303954286
-80.27283       -8.6412689      0.187893918808
-80.2725297     -8.6411162      0.22501096103
-80.2722202     -8.6409635      0.263032506523
-80.2719108     -8.6408198      0.300612533441
-80.2716103     -8.6406581      0.33821233839
-80.27131       -8.6405053      0.375334461391
-80.2710095     -8.6403526      0.412471166086
-80.2707001     -8.6401999      0.450482911927
-80.2703906     -8.6400471      0.488509444666
-80.2700993     -8.6398853      0.52522713763
-80.2697989     -8.6397326      0.562354088058
-80.2694894     -8.6395709      0.600828217536
-80.2691981     -8.6394181      0.637071247595
-80.2688886     -8.6392473      0.676023425931
-80.2685882     -8.6390946      0.713150425596
-80.2682788     -8.6389509      0.750730603804
-80.2679783     -8.6387981      0.787872459485
-80.2676599     -8.6386635      0.825947927083
-80.2673686     -8.6385108      0.862185868818
-80.2670501     -8.6383762      0.900271491364
-80.2667406     -8.6382235      0.938293256103
-80.2664311     -8.6380798      0.975883478883
-80.2661217     -8.6379452      **1.01304928976**  <--- print until here
-80.2658214     -8.6378015      1.04972439283
-80.2655029     -8.6376578      1.08821462134

Любая помощь приветствуется.

Ответы [ 3 ]

2 голосов
/ 28 мая 2020

Не могли бы вы попробовать следующее. Написано и протестировано только на показанных образцах.

awk '1;$NF~/^1\.0/{exit}' Input_file 

Также, если ваш Input_file имеет более 3 полей, измените его на:

awk '1;$3~/^1\.0/{exit}' Input_file


Извините, я Я немного запутался с описанием, если вам нужно напечатать до 3-го появления 1.0, а затем попробуйте следовать (хотя показанные жирным шрифтом строки shw вы хотите распечатать только до самого первого появления, но добавляя это на случай, если кому-то это понадобится).

awk '1;$NF~/^1\.0/ && ++count==3{exit}' Input_file 
2 голосов
/ 28 мая 2020

С awk это будет:

awk '$3>=1{exit} <a href="/questions/20262869/why-does-1-in-awk-print-the-current-line" title="What the hell is this?">1</a>' file
1 голос
/ 28 мая 2020
sed -r '1,/.+ +.*+ +0.263/ p' -n < Input_file

этот sed говорит:

  • не печатать ничего из Input_file
  • за исключением, начиная со строки 1
  • до соответствие строки /.+ +.*+ +0.263/. Это означает:
    • 1 или более символов, за которыми следуют
    • 1 или более пробелов, за которыми следуют
    • 1 или более символов, за которыми следует
    • 1 или более пробелов, за которыми следует на
    • число 0,263
  • напечатайте эти строки

Регулярное выражение определенно можно улучшить, указав начало строки и пробелы против вкладок . Но общая идея есть.

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