输入(未排序,坏)
"XYZ-ZTE-43255 serverB618 agreed","XYZ-ZTE-44432"
,"XYZ-ZTE-43255"
"XYZ-ZTE-52775 serverB110 agreed",
"XYZ-ZTE-79213 - serverB688 agreed",
"XYZ-ZTE-77323 serverB617 agreed",
"XYZ-ZTE-81422 - serverB609 agreed","XYZ-ZTE-77323"
"XYZ-ZTE-32785 - serverA626 agreed","XYZ-ZTE-52775"
"XYZ-ZTE-43235 - serverA605 disagreed (asdfjlasdj yxvv il lkyeas sadfa)","XYZ-ZTE-43235"
"XYZ-ZTE-11591 serverB144 agreed",
,"XYZ-ZTE-11591"输出(排序,所需的,好的!)
"XYZ-ZTE-43255 serverB618 agreed","XYZ-ZTE-43255"
,"XYZ-ZTE-44432"
"XYZ-ZTE-52775 serverB110 agreed","XYZ-ZTE-52775"
"XYZ-ZTE-79213 - serverB688 agreed",
"XYZ-ZTE-77323 serverB617 agreed","XYZ-ZTE-77323"
"XYZ-ZTE-81422 - serverB609 agreed",
"XYZ-ZTE-32785 - serverA626 agreed",
"XYZ-ZTE-43235 - serverA605 disagreed (asdfjlasdj yxvv il lkyeas sadfa)","XYZ-ZTE-43235"
"XYZ-ZTE-11591 serverB144 agreed","XYZ-ZTE-11591"简而言之:这是一个带有两列的XLS的片段。这两列必须以如下方式排列起来:
左列中的XYZ-ZTE-77323与右列上的XYZ-ZTE-77323匹配。
但是有这样的事情:
,"XYZ-ZTE-43255"它必须与这句话相符:
"XYZ-ZTE-43255 serverB618 agreed","XYZ-ZTE-43255"但是,行(在输入中)已经包含了一个右列:
"XYZ-ZTE-43255 serverB618 agreed","XYZ-ZTE-44432"例如,如果:
"XYZ-ZTE-44432"在左列中不存在,则它必须位于输出中的新行中。
有人知道怎么做吗?
发布于 2011-06-17 10:56:24
将数据填充到数据库中,然后使用联接根据您喜欢的任何条件检索数据。SQLite是一个很好的轻量级系统,没有服务器组件,这对于以这种方式操作小数据集是很好的。
发布于 2011-06-29 04:18:08
这会产生预期的输出,使用python。这有点麻烦,因为我不太了解Pyton,但它起作用了:)
#!/bin/bash
python -c '
import sys, csv;
reader = csv.reader(sys.stdin)
nbli=0 # line number (to maintin input order)
nbwi=6 # width of line number.. (zero padded)
left=[]
rght=[]
for row in reader:
nbli+=1
fnum=format(nbli, "0"+str(nbwi)+"d")
if row[0] != "": left.append(row[0]+fnum)
if row[1] != "": rght.append(row[1]+fnum)
left.sort()
rght.sort()
coll = []
l ,r = 0, 0
while l < len(left) or r < len(rght):
#
if l >= len(left):
numr = rght[r][-nbwi:]
datr = rght[r][:len(rght[r])-nbwi]
coll.append(numr + " " + ",\"" + datr + "\"")
r+=1
elif r >= len(rght):
numl = left[l][-nbwi:]
datl = left[l][:len(left[l])-nbwi]
coll.append(numl + " " + "\"" + datl + "\",")
l+=1
else:
numl = left[l][-nbwi:]
numr = rght[r][-nbwi:]
datl = left[l][:len(left[l])-nbwi]
datr = rght[r][:len(rght[r])-nbwi]
#
if datl.startswith(datr+" "):
coll.append(numl + " " + "\"" + datl + "\",\"" + datr + "\"")
l+=1
r+=1
elif datl < datr + " ":
coll.append(numl + " " + "\"" + datl + "\",")
l+=1
else:
coll.append(numr + " " + ",\"" + datr + "\"")
r+=1
coll.sort()
c = 0
while c < len(coll):
print coll[c][nbwi+1:]
c+=1
' \
<<-'STDIN'
"XYZ-ZTE-43255 serverB618 agreed","XYZ-ZTE-44432"
,"XYZ-ZTE-43255"
"XYZ-ZTE-52775 serverB110 agreed",
"XYZ-ZTE-79213 - serverB688 agreed",
"XYZ-ZTE-77323 serverB617 agreed",
"XYZ-ZTE-81422 - serverB609 agreed","XYZ-ZTE-77323"
"XYZ-ZTE-32785 - serverA626 agreed","XYZ-ZTE-52775"
"XYZ-ZTE-43235 - serverA605 disagreed (asdfjlasdj yxvv il lkyeas sadfa)","XYZ-ZTE-43235"
"XYZ-ZTE-11591 serverB144 agreed",
,"XYZ-ZTE-11591"
STDIN输出:
"XYZ-ZTE-43255 serverB618 agreed","XYZ-ZTE-43255"
,"XYZ-ZTE-44432"
"XYZ-ZTE-52775 serverB110 agreed","XYZ-ZTE-52775"
"XYZ-ZTE-79213 - serverB688 agreed",
"XYZ-ZTE-77323 serverB617 agreed","XYZ-ZTE-77323"
"XYZ-ZTE-81422 - serverB609 agreed",
"XYZ-ZTE-32785 - serverA626 agreed",
"XYZ-ZTE-43235 - serverA605 disagreed (asdfjlasdj yxvv il lkyeas sadfa)","XYZ-ZTE-43235"
"XYZ-ZTE-11591 serverB144 agreed","XYZ-ZTE-11591"https://unix.stackexchange.com/questions/15166
复制相似问题