Cat标头并使用awk重命名列标题?

时间:2015-05-04 01:58:45

标签: linux bash shell awk

我有一个像这样的输入文件(input.txt):

name value1 value2
A 3 1
B 7 4
C 2 9
E 5 2

另一个带有名称列表(names.txt)的文件如下:

B
C

使用grep -f,我可以获得名称为“B”和“C”的所有行

grep -wFf names.txt input.txt

获取

B 7 4
C 2 9

但是,我想将标题保留在输出文件的顶部,并将列名“name”重命名为“ID”。使用grep,保持名称为B和C的行,输出应为:

**ID** value1 value2
B 7 4
C 2 9

我在想awk应该能够做到这一点,但是对awk不熟悉我不知道如何处理这个问题。帮助赞赏!

2 个答案:

答案 0 :(得分:2)

虽然可以在awk中执行此操作,但解决实际问题的最快方法是在grep输出前简单地添加所需的标头。

echo **ID** value1 value2 > Output.txt && grep -wFf names.txt input.txt >> Output.txt

更新由于OP有多个文件,我们可以修改上面的行来代替输入文件中的第一行。

head -n 1 input.txt | sed 's/name/ID/' > Output.txt && grep -wFf names.txt input.txt >> Output.txt

答案 1 :(得分:1)

以下是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

中的数据