Проблема с сопоставлением awk

Похоже, что этого можно достичь что вам нужно.

Если NR (номер строки) делится на 2, пометьте дополнительный символ новой строки в конце. А затем распечатайте строку.

$ awk 'NR%2==0{$0=$0"\n"}1' foo.txt
line1
line2

line3
line4

line5
$

Если это просто пустая строка между каждой строкой, используйте это

$ awk '{print $0,"\n"}' foo.txt
line1

line2

line3

line4

line5

$
2
05.07.2017, 08:21
3 ответа

Если вы хотите использовать регулярное выражение, вам нужно использовать соответствующие модификаторы и якоря, чтобы получить только желаемое соответствие (es ). В вашем случае шаблон Regex1.1.1.2(.означает, что любой одиночный символ BTW )будет соответствовать всем строкам, следовательно, результат. Последний из них awk '"^1.1.1.2$" {print NR}'- это не то, как вы помещаете шаблон Regex в awk--, вам нужно использовать либо //, либо $<field> ~ <pattern>.


Вот как можно получить желаемый результат:

  • Способ регулярного выражения :избежать всех ., чтобы трактовать их буквально, добавить $для соответствия концу:

    awk '/1\.1\.1\.2$/ {print NR}' test.csv
    
  • Обработка строк :печать номера записи, если ,, за которым следует любое горизонтальное разделенное пробелом последнее поле1.1.1.2:

    awk -F ',[[:blank:]]*' '$NF == "1.1.1.2" {print NR}' test.csv 
    
2
27.01.2020, 22:09
ip=1.1.1.2; sed -ne "/,${ip//./\\.}\$/=" yourIPfile

Где мы избегаем точек .и даем это команде sed =, которая отобразит соответствующий номер строки.

0
27.01.2020, 22:09

Всегда можно попробовать старый добрыйgrep:

grep -wFn 1.1.1.2 yourIPfile

или

ip=1.1.1.2 ; grep -wFn $ip yourIPfile

В обоих случаях вывод

1:node2,1.1.1.2
0
27.01.2020, 22:09

Теги

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