cat 文件以显示第一行和 grep 查询的值

cat 文件以显示第一行和 grep 查询的值

我在 file.txt 中有以下结构

NTL|OPC|RN1|CNL|NUE|NUF|TPB|EIP
11212455464       |16384|55320|     |2799819E405       |                  |2|                                                  
32545687784       |16384|55320|     |1194155B581       |                  |2|                                                  
54565487788       |16384|55321|     |8599132D051       |                  |2|                                                  
23154688789       |4013|55115|11529|163624D585        |16D7620595        |1| 
...

我想要这个结果(标题加上查询的值)

NTL|OPC|RN1|CNL|NUE|NUF|TPB|EIP
23154688789       |4013|55115|11529|163624D585        |16D7620595        |1| 

我尝试过这样的事情

head -1 file.txt | grep 23154688789

但它不起作用。

答案1

如果你可以使用sed它,你可以让它打印第 1 行和任何匹配的行,例如

sed -n -e '1p;/23154688789/p' file.txt

-n会告诉它不要打印输出,除非有指示,1p打印行 1 并/23154688789/p打印与该模式匹配的任何行

答案2

在您的代码中替换“|”和 ';' head 给你第一行并将其通过管道输入 grep 使 grep 只在第一行搜索。你需要这样的东西:

head -n 1 file.txt ; grep 23154688789 file.txt

答案3

awk命令将允许这样做。这里,如果记录号 ( NR) 为 1 或者我们在第一个字段上获得匹配,则输出该行:

awk -v id=23154688789 'NR==1 || $1==id'

结果

NTL|OPC|RN1|CNL|NUE|NUF|TPB|EIP
23154688789       |4013|55115|11529|163624D585        |16D7620595        |1|

答案4

假设仅有的以“NTL”开头的行将是标题行,grep可以使用单个行来实现此目的。

$ grep -E '^NTL|23154688789' file.txt
NTL|OPC|RN1|CNL|NUE|NUF|TPB|EIP
23154688789 |4013|55115|11529|163624D585 |16D7620595 |1| . . .
$

相关内容