所以我有一个与此类似的文件
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
答案 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)
这不是最优雅的方式,但它可以相对快速地完成工作。