首页 文章

基于第二个字段值打印行,不使用循环

提问于
浏览
0

我尝试从文件中检索一行而不使用循环 .

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 回答

  • 2

    使用:

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

    两者的输出相同:

    val2;b;d;e
    
  • 0

    鉴于您的输入文件,下面的单行应该工作:

    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
    

相关问题