你能帮我么?感谢您的协助!
我有这个文件:
[root@acnode1 tmp]# cat nodeidhost.out
node_id | hostname
c31abf5a-ece5-4da5-afa3-1af4e19f9749 | acnode1.storagedomain
c41bcebe-37a3-42ce-8ded-249b2726ca17 | acnode2.storagedomain
5b00247c-f38c-4c8e-9835-a8b935549267 | acnode3.storagedomain
10a69825-38d8-4675-b845-906d94a99ec8 | acnode4.storagedomain
f2cb6d0f-54fa-4c70-ac02-65ff8aca9edc | acnode5.storagedomain
和这个文件:
[root@acnode1 tmp]# cat nodeidversion.out
node_id | installed_version | available_version
c31abf5a-ece5-4da5-afa3-1af4e19f9749 | 4.5.0-284 | 4.5.0-284
c41bcebe-37a3-42ce-8ded-249b2726ca17 | 4.5.0-284 | 4.5.0-284
5b00247c-f38c-4c8e-9835-a8b935549267 | 4.5.0-284 | 4.5.0-284
10a69825-38d8-4675-b845-906d94a99ec8 | 4.5.0-284 | 4.5.0-284
f2cb6d0f-54fa-4c70-ac02-65ff8aca9edc | 4.5.0-284 | 4.5.0-284
我正在尝试在while内创建一会儿,所以在第一个会'nodeidhost.out'加载ID(第一列)和Hostname(第二列)的同时,但是我还需要检查文件'nodeidversion.out'到检查什么是“ installed_version”和“ available_version”并合并以下详细信息:
注意:“ node_id”列是进行比较的“主键”:
while read nodeid; do
node_id=`echo $nodeid | awk '{print $1}'`
node_name=`echo $nodeid | awk '{print $3}' | cut -d"." -f1`
.... second while checking 'installed_version' and 'available_version' from 'nodeidversion.out'
done < /tmp/nodeidhost.out
最后,我需要类似的东西:
节点XXXX正在运行版本YYYY,最新版本为ZZZZ
你能帮我么?谢谢!!
通过尝试使用嵌套的while循环手动解析文件,您的生活变得太复杂了。符合join
命令:
Usage: join [OPTION]... FILE1 FILE2
For each pair of input lines with identical join fields, write a line to
standard output. The default join field is the first, delimited by blanks.
...
请参阅man join
以获取更多信息。解决您的问题的示例用法:
$ join -t'|' -j1 -o 1.2,2.2,2.3 --header nodeid* | column -s'|' -o' | ' -t
hostname | installed_version | available_version
acnode1.storagedomain | 4.5.0-284 | 4.5.0-284
acnode2.storagedomain | 4.5.0-284 | 4.5.0-284
acnode3.storagedomain | 4.5.0-284 | 4.5.0-284
acnode4.storagedomain | 4.5.0-284 | 4.5.0-284
acnode5.storagedomain | 4.5.0-284 | 4.5.0-284
标志说明:
-t'|'
指定输入文件以竖线分隔。-j1
使联接位于两个文件的第一个字段上。(这里实际上是多余的,因为默认值是在第一个字段上加入。)-o 1.2,2.2,2.3
指定文件1的第2列的输出格式,然后是文件2的第2列和第3列。--header
因为文件有标头...我认为这没有什么区别,但不会造成伤害。| column ... (etc)
只需进行一些后期处理即可整理列对齐,因为join会从输入中丢弃该信息。注意:join命令确实假定输入已排序。使用sort命令对输入进行预处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句