大家下午好,
我有一个包含两个字段的文件,每个字段代表一对成员。 我想保留每对中的一个成员,并且哪个成员是重要的,因为这些是研究中的重复样本的代码。
每对在我的文件中出现两次,该对中的每个成员在任一列中出现一次。
输入文件的示例是:
XXX1 XXX7
XXX2 XXX4
abc2 dcb3
XXX7 XXX1
dcb3 abc2
XXX4 XXX2
所需输出的一个例子是
XXX1
XXX2
abc2
如何在bash中实现这一目标?谢谢。
答案 0 :(得分:2)
以下是GNU awk,剪切和排序的组合,将scipt存储为duplicatePairs.awk
:
{ if ( $1 < $2) print $1, $2
else print $2, $1
}
并按照以下方式运行:awk -f duplicatePairs.awk your_file | sort -u | cut -d" " -f1
if对这些对进行排序,使得带有x,y
的行和带有y,x
的行打印相同。然后sort -u
可以删除重复的行。 cut
选择第一列。
使用稍微大一点的awk脚本,我们可以解决要求&#34; awk-only&#34;:
{
smallest = $1;
if ( $1 > $2) {
smallest = $2
}
if( !(smallest in seen) ) {
seen [ smallest ] = 1
print smallest
}
}
运行方式如下:awk -f duplicatePairs.awk your_file
答案 1 :(得分:0)
虽然Lars上面发布的答案非常有效但我想建议一个替代方案,以防万一有人偶然发现这个问题。
我以前曾使用xpathSApply(a,"//table[contains(.,'Name and Principal|Principal Position|another string')]")
来获得相同的结果。我没有意识到它有效,因为我文件中的行数没有减半。结果是因为我对我的数据做了一些错误的假设。