根据第二个字段值打印行,不使用循环
Print line based on 2nd field value, without using a loop
我尝试在不使用循环的情况下从文件中检索一行。
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
给定你的输入文件,下面的一行代码应该可以工作:
awk -F";" ' == "b" {print}' myFile.txt
解释:
awk -F";" ##Field Separator as ";"
' == "b" ##Searches for "b" in the second column()
{print}' ##prints the searched line
使用:
grep
:
grep '^[^;]*;b;' myFile.txt
sed
:
sed '/^[^;]*;b;/!d' myFile.txt
两者的输出相同:
val2;b;d;e
我尝试在不使用循环的情况下从文件中检索一行。
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
给定你的输入文件,下面的一行代码应该可以工作:
awk -F";" ' == "b" {print}' myFile.txt
解释:
awk -F";" ##Field Separator as ";"
' == "b" ##Searches for "b" in the second column()
{print}' ##prints the searched line
使用:
grep
:grep '^[^;]*;b;' myFile.txt
sed
:sed '/^[^;]*;b;/!d' myFile.txt
两者的输出相同:
val2;b;d;e