awk -F"[{}:,]+" '{for(i=1;i<=NF;i++){if($i=="\"SHANAME\""){a=a?a","$(i+1):$(i+1)}}}END{print a}' filetest20.txt
时间: 2023-10-04 12:09:43 浏览: 163
这个awk命令的含义是在一个名为"filetest20.txt"的文件中,查找包含"SHANAME"的字段,并将其后面的值提取出来。
让我们逐步解释这个awk命令的各个部分:
1. `-F"[{}:,]+"`:设置字段分隔符为多个字符,包括 `{}`、`,`、`:` 和 `+`。这将帮助我们将每个字段分隔开。
2. `'...'`:这是awk命令的主体部分,由单引号括起来。
3. `for(i=1;i<=NF;i++)`:这是一个循环,从第一个字段(i=1)开始,一直到最后一个字段(NF表示总字段数)。
4. `if($i=="\"SHANAME\"")`:如果当前字段的值等于"SHANAME"(带有双引号),则执行下面的语句。
5. `a=a?a","$(i+1):$(i+1)`:将当前字段后面的值提取出来,并将其存储在变量a中。如果a已经有值,则在新值之前加上逗号。这样可以将多个匹配的值以逗号分隔起来。
6. `END{print a}`:在处理完所有行后,打印变量a的值。它将包含所有匹配的值,以逗号分隔。
总结来说,这个awk命令会遍历文件的每一行,查找包含"SHANAME"的字段,并将其后面的值提取出来。多个匹配的值会以逗号分隔,并打印出来。
请确保你已经将实际的文件名替换为"filetest20.txt",并将其放在当前工作目录下。如果文件存在,并且包含符合条件的字段和值,那么运行这个awk命令会输出相应的结果。
如果还有其他问题,请随时提问。
相关问题
os_disk_symbol=$(echo $(lsblk |grep -B1 -E "part|boot" |grep -E "^sd[a-z]+|^nvme" |awk '{print $1}') |sed 's/ /|/') non_os_disk_set=$(lsscsi -g |-E "ATA|TOSHIBA" |awk '{print $(NF-1)}' |grep -Ev $os_disk_symbol) if [[ -n $non_os_disk_set ]];then for i in $(echo "$non_os_disk_set") do rotationRate=$(smartctl -i $i |awk -F":" '/Rotation Rate/{print $2}') if [[ $rotationRate =~ "Solid State Device" ]];then echo $i |awk -F"/" '{print $3}' >> ssd_symbol_set elif [[ $rotationRate =~ "rpm" ]];then echo $i |awk -F"/" '{print $3}' >> hdd_symbol_set fi done fi
这是一个 Shell 脚本,主要作用是获取当前系统中所有硬盘的信息,并将非系统盘的硬盘区分为 SSD 和 HDD 两类,并将它们的设备符号分别保存在 ssd_symbol_set 和 hdd_symbol_set 两个文件中。具体实现步骤如下:
1. 使用 lsblk 命令获取当前系统中所有硬盘的信息,并通过 grep 命令过滤出包含 "part" 或 "boot" 字段的行,然后使用 awk 命令提取出硬盘设备符号,并使用 sed 命令将多个设备符号合并为一个正则表达式。
2. 使用 lsscsi 命令获取所有 SCSI 设备的信息,并通过 awk 命令提取出硬盘设备符号,并使用 grep 命令过滤掉系统盘的设备符号。
3. 遍历所有非系统盘的设备符号,使用 smartctl 命令获取硬盘信息,并使用 awk 命令提取出硬盘类型(SSD 或 HDD),然后将设备符号保存到对应的文件中。
最终,执行完该脚本后,可以通过查看 ssd_symbol_set 和 hdd_symbol_set 文件来获取系统中所有 SSD 和 HDD 的设备符号。
解释以下命令的功能。 awk -F',' '{print $3}' test.txt awk -F',' '{sum += $3} END {print sum}' test.txt awk -F ',' '{print $1, $(NF-1)}' test.txt awk -F ',' '{ print toupper($2) }' test.txt awk '/Purple/ {print}' test.txt awk -F ',' 'NR % 2 == 1 {print $1}' test.txt awk -F ',' '$2 == "Grape" || $4 == "Red" {print $2,$4}' test.txt awk -F ',' '{if ($3 > 15) print $1,$2,$3; else print "---"}' test.txt awk -F',' '{arr[$4]+=$3} END {for (i in arr) print i, arr[i]}' test.txt awk -F',' '{printf "$%.2f\n", $3}' test.txt
1. 第一条命令的功能是从名为 test.txt 的文件中提取第三列数据并输出。
2. 第二条命令的功能是计算名为 test.txt 的文件中第三列数据的总和并输出。
3. 第三条命令的功能是从名为 test.txt 的文件中提取第一列和倒数第二列数据并输出。
4. 第四条命令的功能是将名为 test.txt 的文件中第二列数据全部转换为大写字母并输出。
5. 第五条命令的功能是从名为 test.txt 的文件中查找包含 "Purple" 字符串的行并输出。
6. 第六条命令的功能是从名为 test.txt 的文件中提取奇数行的第一列数据并输出。
7. 第七条命令的功能是从名为 test.txt 的文件中查找第二列数据为 "Grape" 或第四列数据为 "Red" 的行并输出这两列数据。
8. 第八条命令的功能是从名为 test.txt 的文件中提取第一列、第二列和第三列数据,如果第三列数据大于 15 则输出,否则输出 "---"。
9. 第九条命令的功能是从名为 test.txt 的文件中计算每个第四列数据的总和,并输出这些数据及其对应的总和。
10. 第十条命令的功能是从名为 test.txt 的文件中提取第三列数据并将其格式化为 $xx.xx 的形式并输出。
阅读全文