我是awk的初学者。 我创建了一个包含员工信息的文件。 不同部门有员工。我想知道每个部门有多少员工。 像
marketing 3
sales 3
production 4
因为我使用了以下命令。
awk 'NR>1 {dept=$5} {count[dept]++} END {for (dept in count) {print dept count[dept]}}' emp
但是在代码之上它计算并显示第一行,即标题。 像
marketing 3
sales 3
department 1
production 4
其中department是列的标题,虽然我使用的是NR> 1 .. 以及如何添加空间或增加所有列的宽度..因为它看起来像上面的输出..但我想要正确显示它.. 那么任何解决方案呢?
这是我的输入文件
empid empname department
101 ayush sales
102 nidhi marketing
103 priyanka production
104 shyam sales
105 ami marketing
106 priti marketing
107 atuul sales
108 richa production
109 laxman production
110 ram production
答案 0 :(得分:1)
使用GNU printf进行正确的制表符间距格式化
awk 'NR>1 {count[$3]++} END {for (dept in count) {printf "%-15s%-15s\n", dept, count[dept]}}' file
如果printf
width
与printf "%3s"
选项一起使用,如下例所示
3
:表示输出将填充为3个字符。 从man awk
,您可以看到更多详细信息:
width The field should be padded to this width. The field is normally padded
with spaces. If the 0 flag has been used, it is padded with zeroes.
.prec A number that specifies the precision to use when printing. For the %e,
%E, %f and %F, formats, this specifies the number of digits you want
printed to the right of the decimal point. For the %g, and %G formats,
it specifies the maximum number of significant digits. For the %d, %o,
%i, %u, %x, and %X formats, it specifies the minimum number of digits to
print. For %s, it specifies the maximum number of characters from the
string that should be printed.
您可以根据需要添加填充计数。对于您指定的输入文件
$ awk 'NR>1 {count[$3]++} END {for (dept in count) {printf "%-15s%-15s\n", dept, count[dept]}}' file
production 4
marketing 3
sales 3