我修改了iostat -e
的输出,如下所示:
iostat -e | egrep -v "errors|trn" | gawk -v name="`uname -n `" '{if($2 > 0 || $3 > 0) print name,$1}' | tr '\n' ' ' ' > ~/abd/diskcheck.out
我想在下一列中打印第二列的值,其中使用Linux
命令重复第一列的值。
我的示例文件是:
$ cat diskcheck.out
hxcsvc-a02 sd2
hxcslc-a01 sd23
hxcslc-a02 sd14
hxcslc-a02 sd17
hxcslc-a02 sd18
hxcslc-a02 sd19
hxcslc-a03 sd11
hxcslc-a07 sd3
hxcslc-a09 sd2
预期产出:
hxcsvc-a02 sd2
hxcslc-a01 sd23
hxcslc-a02 sd14 sd17 sd18 sd19
hxcslc-a03 sd11
hxcslc-a07 sd3
hxcslc-a09 sd2
答案 0 :(得分:1)
以更简单的方式使用awk
awk 'BEGIN{delete hash;}{hash[$1]=hash[$1]FS$2}END{for (i in hash) print i, hash[i]}' file
hxcslc-a07 sd3
hxcslc-a09 sd2
hxcsvc-a02 sd2
hxcslc-a01 sd23
hxcslc-a02 sd14 sd17 sd18 sd19
hxcslc-a03 sd11
其中file
是您的输入文件
$ cat file
hxcsvc-a02 sd2
hxcslc-a01 sd23
hxcslc-a02 sd14
hxcslc-a02 sd17
hxcslc-a02 sd18
hxcslc-a02 sd19
hxcslc-a03 sd11
hxcslc-a07 sd3
hxcslc-a09 sd2
我会尝试分解答案,因为你刚刚使用它,
awk
一次处理一行,并且语法为awk 'BEGIN{..}{..}END{..}'
,其中BEGIN
和END
中的指令在文件完成之前和之后执行按相应顺序处理。awk
默认情况下仅通过此限制器拆分输入记录。您可以根据需要更改此值并输出字段分隔,分别使用FS
和OFS
变量。$1
(这意味着第一列用空格分隔)作为索引,值为$2
。将每个唯一键的值附加到已存在的值。END
循环中,打印唯一索引及其值。如果要使用其他命令在管道中运行上述命令,请尝试使用
<your-previous-command> | awk 'BEGIN{delete hash;}{hash[$1]=hash[$1]FS$2}END{for (i in hash) print i, hash[i]}'
有关其用法的更详细说明,请推荐一些Awk tutorials
。