Вывести строку на основе значения 2-го поля без использования цикла - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь извлечь строку из файла без использования цикла.

myFile.txt

val1;a;b;c
val2;b;d;e
val3;c;r;f

Я хочу получить строку, в которойвторой столбец - b.

Если я сделаю grep "b" myFile.txt, то будет выведена первая и вторая строки.

Если я сделаю cat myFile.txt | cut -d ';' -f2 | grep "b", тогда результат будет просто bтогда как я хотел бы получить полную строку val2;b;d;e.

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

while read line; do
   if [ `echo $line | cut -d ';' -f2` = "b" ]; then
      echo $line
   fi
done < myFile.txt

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Использование:

  1. grep:

    grep '^[^;]*;b;' myFile.txt
    
  2. sed:

    sed '/^[^;]*;b;/!d' myFile.txt
    

Вывод одинаков для обоих:

val2;b;d;e
0 голосов
/ 10 декабря 2018

Учитывая ваш входной файл, ниже должна работать одна строка:

awk -F";" '$2 == "b" {print}' myFile.txt

Объяснение:

awk -F";"                    ##Field Separator as ";"
'$2 == "b"                   ##Searches for "b" in the second column($2)
{print}'                     ##prints the searched line
...