unix 如何跳过文件的第一行- awk

bvjxkvbb  于 2022-12-23  发布在  Unix
关注(0)|答案(2)|浏览(204)

我是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

其中部门是列的标题,虽然我使用了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
ttisahbt

ttisahbt1#

使用GNU printf来设置适当的制表符间距格式

awk 'NR>1 {count[$3]++} END {for (dept in count) {printf "%-15s%-15s\n", dept, count[dept]}}' file

您可以将printfwidth选项一起使用,如下例所示,如果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
ctrmrzij

ctrmrzij2#

您可以使用tail跳过特定数量的标题行。以下是一个示例:

command | awk  '{print $1}' | tail -n +2

这将在对命令结果的第一列执行awk之后跳过第一行。

相关问题