我有一个包含许多列的文件。让我们说“Employee_number”“Employee_name”“Salary”。我想通过提供全部或部分列名来显示列中的所有条目。例如,如果我输入“名称”,我希望打印所有员工姓名。是否可以使用awk以简单的方式执行此操作? 感谢
答案 0 :(得分:3)
给出一个脚本getcol.awk
如下:
BEGIN {
colname = ARGV[1]
ARGV[1] = ""
getline
for (i = 1; i <= NF; i++) {
if ($i ~ colname) {
break;
}
}
if (i > NF) exit
}
{print $i}
...和输入文件test.txt
:
apple banana candy deer elephant
A B C D E
A B C D E
A B C D E
A B C D E
A B C D E
A B C D E
A B C D E
......命令:
$ awk -f getcol.awk b <test.txt
...给出以下输出:
B
B
B
B
B
B
B
请注意,输出文本不包含测试文件的第一行,该行被视为标题。
答案 1 :(得分:2)
简单的单行将可以解决问题:
$ cat file
a b c
1 2 3
1 2 3
1 2 3
$ awk -v c="a" 'NR==1{for(i=1;i<=NF;i++)n=$i~c?i:n;next}n{print $n}' file
1
1
1
$ awk -v c="b" 'NR==1{for(i=1;i<=NF;i++)n=$i~c?i:n;next}n{print $n}' file
2
2
2
$ awk -v c="c" 'NR==1{for(i=1;i<=NF;i++)n=$i~c?i:n;next}n{print $n}' file
3
3
3
# no column d so no output
$ awk -v c="d" 'NR==1{for(i=1;i<=NF;i++)n=$i~c?i:n;next}n{print $n}' file
注意:根据您的要求,您希望name
与employee_name
匹配,请注意,如果您提供employee
,您将获得与employee
匹配的最后一列,这很容易更改但是。