我在 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| . . .
$