请看一下下面的代码,我想要的只是从文件中获取node_name字符串,如果它们相等,执行uniq来获取uniq字符串。
但在下面的示例中,我有两行相等的代码( node_name moon1 )
但是为什么uniq命令不把它减少到一行呢?我真的不明白为什么?
sed s'/=/ /'g file| awk -v WORD=node_name '$2 == WORD {print $0}' | awk '{print $2" "$3}' | sort | uniq
node_name moon1
node_name moon1文件:
.
.
/home/home1/home2/config1/COMPANY/my.config node_name=moon1
/home/home1/home2/config1/MEAS2XML/my.config.tmp node_name=moon1
.
.发布于 2010-11-23 01:02:33
uniq合并相同行失败的主要原因有两个:
顺便说一句,'sort -u‘是'sort | uniq’的更好的替代。
编辑:
看起来像是这两个问题中的一个或两个:
在这种情况下,将CR/LF行终止符更改为LF将解决这两个问题,尽管通常最好也过滤尾随空格:
作为替代方法,
sed 's|\r$||'过滤您的文件
发布于 2010-11-23 01:00:55
听起来你的文件里有一些乱码。首先使用以下命令进行清洁:
dos2unix your_file此外,这与您的问题无关,但您可以用简单的sort -u替换sort | uniq。
发布于 2010-11-23 01:04:06
我没有尝试您在问题中指定的命令,而是运行以下命令:
分类|cut -d \= -f 2|排序|uniq
其中"foo“是包含示例中的2行代码的文件。上面的输出是"moon1“。
比你的例子简单,因为我假设每行只有一个'name=value‘对;我对你的文件格式一无所知。
无论如何,我希望这能有所帮助。
https://stackoverflow.com/questions/4247791
复制相似问题