大家好,对于这个简单的问题,抱歉,我有一个列表,列出了我要提取数据的带有PC规格的文本文件。使用:
awk '/Disk\:/ && !/USB/ ||FNR==1 {c++;if(FNR==1)c=0;print c " " $0}' *.txt > file
我可以按以下方式提取每个系统的磁盘数量和型号
0 SYSTEM
1 Disk: ATA WDC WD5000AAKX-0 SCSI Disk Device (465,8 GB)
0 SYSTEM
1 Disk: ST3160815AS (149,0 GB)
0 SYSTEM
1 Disk: WDC WD5003AZEX-00MK2A0 (465,8 GB)
2 Disk: WDC WD5003AZEX-00MK2A0 (465,8 GB)
3 Disk: WDC WD40EFRX-68WT0N0 (3,6 TB)
每个系统最多可以有四个磁盘,而我想做的是添加缺少的行,以便将来将文件转换为CSV。所需的输出如下:
0 SYSTEM
1 Disk: ATA WDC WD5000AAKX-0 SCSI Disk Device (465,8 GB)
2 Disk: NO DISK
3 Disk: NO DISK
4 Disk: NO DISK
0 SYSTEM
1 Disk: ST3160815AS (149,0 GB)
2 Disk: NO DISK
3 Disk: NO DISK
4 Disk: NO DISK
0 SYSTEM
1 Disk: WDC WD5003AZEX-00MK2A0 (465,8 GB)
2 Disk: WDC WD5003AZEX-00MK2A0 (465,8 GB)
3 Disk: WDC WD40EFRX-68WT0N0 (3,6 TB)
4 Disk: NO DISK
我在论坛上进行了搜索,找到了两个示例,它们都添加了缺失行和按n分组的行,但是还没有设法将两者合并。 任何帮助将不胜感激。
答案 0 :(得分:1)
这是对原始脚本的更新。只需少量更新即可保持相同的逻辑。
awk '(NR!=1) && (FNR==1) { for(c++;c<=4;++c) { print c" Disk: NODISK" }}
(FNR==1) { c=0; print c,$0 }
/Disk\:/ && !/USB/ { print ++c,$0 }
END{ for(c++;c<=4;++c) { print c" Disk: NODISK" }}' *txt
c=0
并打印该行(打印0 SYSTEM
) DISK
但不包含单词USB
,则递增c
并打印该行。