根据每行数量扩展列表

时间:2017-03-29 09:38:24

标签: expand

所以我有一个与此类似的文件

A 1 foo bar 1 A 1 foo bar 2 B 3 foo bar 5 B 3 foo bar 6

如果第一列是ID,则第二列是我需要重复该行的次数。输出应该如下所示

A foo bar 1 A foo bar 2 B foo bar 5 B foo bar 6 C foo bar 5 C foo bar 6 D foo bar 5 D foo bar 6

但是,由于我尝试使用的文件相当大,因此扩展速度非常慢。有任何想法吗? :)

EDIT1:我做过的代码,我确实有两个输入,一个文件包含我之前显示的列,另一个文件只有ID和计数用短划线分隔。

for ID in $(cat $ID_File);do grep "^$ID[^0-9]" $IN > temp2.txt Cycles=$(echo $ID| sed 's/.*-//') for i in $(seq 1 1 $Cycles);do cut -f2- temp2.txt| awk '{print '$Start_ID'"\t"$0}'>> $OUT Start_ID=$(( $Start_ID + 1 )) done done

1 个答案:

答案 0 :(得分:0)

我找到了答案!我没有使用grep多次查看文件,而是使用了以下只运行一次文件的Python脚本。

FILE='A.txt'
ID=''
Prefix='A'

Number=1
First=1
Current=[]
OUT='B.txt'
f=open(File,'w')

for line in open(FILE):
 line1=line.split('\t')
 if ID!=line1[0] and First==0:
  ID=line1[0]
  for i in range(0,int(Current[0][1])):
   for j in range(0,len(Current)):
    f.write(' '.join([Prefix+str(Number)]+Current[j][2:]))
  Number=Number+1
  Current=[]
  Current.append(line1) 
 elif ID!=line1[0] and First==1:
  ID=line1[0]
  First=0
  Current.append(line1)
 elif ID==line1[0]:
  Current.append(line1)

这不是最优雅的方式,但它可以相对快速地完成工作。