我有一个输入文件(input.txt)这样:
name value1 value2
A 3 1
B 7 4
C 2 9
E 5 2
和另一个具有名称列表(名称.txt)的文件:
B
C
使用grep -f,我可以用名称" b"one_answers" c"
获得所有行grep -wff names.txt input.txt
获得
B 7 4
C 2 9
但是,我想将标头保持在输出文件的顶部,并将列名称为" id"名称。并使用grep,以保持名称b和c的行,输出应为:
**ID** value1 value2
B 7 4
C 2 9
我认为尴尬应该能够实现这一目标,但是成为尴尬的新手,我不确定如何处理。帮助感谢!
虽然可以在awk
中执行此操作,但解决您实际问题的最快方法就是简单地准备您想要的标头,然后在GREP输出前面。
echo **ID** value1 value2 > Output.txt && grep -wFf names.txt input.txt >> Output.txt
update 由于OP具有多个文件,因此我们可以修改上线以将第一行从输入文件中拉出。
head -n 1 input.txt | sed 's/name/ID/' > Output.txt && grep -wFf names.txt input.txt >> Output.txt
这是如何使用awk
awk 'FNR==NR {a[$1];next} FNR==1 {$1="ID";print} {for (i in a) if ($1==i) print}' name input
ID value1 value2
B 7 4
C 2 9
将names
存储在数组a
然后测试提交的 #1
,如果它在数组中包含数据a