我有一个包含很多列的文件。让我们说“Employee_number”“Employee_name”“Salary”。我想通过给出全部或部分列名来显示列中的所有条目。例如,如果我输入“姓名”,我希望打印所有员工姓名。是否可以使用 awk 以简单的方式做到这一点?谢谢
问问题
742 次
2 回答
4
给定一个脚本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
请注意,输出文本不包括测试文件的第一行,它被视为标题。
于 2013-04-09T06:13:50.843 回答
3
Simple one-liner will do the trick:
$ 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
Note: as in your requirement you want name
to match employee_name
just be aware if you give employee
you will get the last column matching employee
this is easily changed however.
于 2013-04-09T07:53:30.353 回答