我编写了一个 Bash 脚本,它将文件中的记录数(行数)和目录中存在的文件名存储在 output.txt 文件中。
输出.txt 文件如下。
No.ofRecord FileName delimiter
563394 1--UnixfileName.txt 28
364794 2--UnixfileName.txt 28
785895 3--UnixfileName.txt 28
99778453 1--NextUnixFileName.txt 18
95645453 2--NextUnixFileName.txt 18
99745313 3--NextUnixFileName.txt 18
所需结果
输出.txt
No.ofRecord FileName delimiter
563394 1--UnixfileName.txt 28
364794 2--UnixfileName.txt 28
785895 3--UnixfileName.txt 28
99778453 1--NextUnixFileName.txt 18
95645453 2--NextUnixFileName.txt 18
99745313 3--NextUnixFileName.txt 18
TOTAL :
1714083 UnixfileName
295169219 NextUnixFileName
笔记:
如果文件名类似于 UnixFileName,则对 No.ofRecord 求和
如果文件名类似于 NextUnixFileName,则对 No.ofRecord 求和。
提前致谢。
答案1
$ awk 'NR > 1 { k = substr($2, 4); cnt[k] += $1 } { print } END { print "\nTOTAL:"; for (k in cnt) print cnt[k], k }' file
No.ofRecord FileName delimiter
563394 1--UnixfileName.txt 28
364794 2--UnixfileName.txt 28
785895 3--UnixfileName.txt 28
99778453 1--NextUnixFileName.txt 18
95645453 2--NextUnixFileName.txt 18
99745313 3--NextUnixFileName.txt 18
TOTAL:
1714083 UnixfileName.txt
295169219 NextUnixFileName.txt
该awk
脚本根据一个键对第一列进行求和,k
该键从第四个字符开始作为第二列。这是对文件中的所有输入行执行的操作,除了第一行(这是标题)。所有输入行都未经修改地作为输出传递。
最后,打印每个找到的键的总数。
为了使总计的列宽与其余数据相同,最后一个print cnt[k], k
可能会更改为以下形式
printf("%-15d%s\n", cnt[k], k)
它将数字格式化为左对齐、15 个字符宽的整数。