介绍
我有一个名为data.dat
结构如下文件:迭代和有条件删除
1: 67: 1 :s
1: 315: 1 :s
1: 648: 1 :ns
1: 799: 1 :s
1: 809: 1 :s
1: 997: 1 :ns
2: 32: 1 :s
算法
,我正在寻找的是算法:
- 在此文件中生成1和行数之间的随机数。
- 如果第四列为“s”,则删除该行。
- 否则产生另一个随机数并重复此操作,直到行数达到某个值。
技术概念
虽然技术概念无关的算法,但我试图解释这一问题。数据显示网络的连接表。该算法允许我们在不同的初始条件下运行它,并研究这些网络的一般属性。特别是,由于删除债券的随机性,这些网络之间的任何共同行为都可以被解释为一个基本规律。
更新:另一个很好的理由在每个步骤中,以产生一个随机数是除去每行后,这可能是因为被剩余行的s
/ns
属性可以改变。
代码
这里是我的代码至今:
#!/bin/bash
# bash in OSX
While ((#there is at least 1 s in the fourth column)); do
LEN=$(grep -c "." data.dat) # number of lines
RAND=$((RANDOM%${LEN}+1)) # generating random number
if [[awk -F, "NR==$RAND" 'data.dat' | cut -d ':' -f 4- == "s"]]; then
sed '$RANDd' data.txt
else
#go back and produce another random
done
exit
我尝试用awk -F, "NR==$RAND" 'data.dat' | cut -d ':' -f 4-
找到第四列和sed '$RANDd' data.txt
删除线。
问题
- 我应该如何检查是否有
s
双在我的档案? - 我不确定
if
中的条件是否正确。 - 此外,我不知道如何强制循环后
else
回去生成另一个随机数。
谢谢
我真的很感谢你的帮助。
您正在删除以“:s”结尾的每一行。为什么要随机数字和迭代? – Beta 2014-09-28 04:27:55
这听起来可能是技术性的,但这是一个网络,我有兴趣在随机删除债券的渗透和灵活性。 – Mahdi 2014-09-28 04:31:42
@JohnB:我知道最快的方法是删除所有内衬的'''但这只是研究的一部分。和将来一样,我打算在达到特定阈值(没有s)之前研究这些网络。基本上,如果我可以运行这个,我有一个程序可以运行任何最后数量的行。此外,重要的是随机删除行以避免任何偏见的结果。 – Mahdi 2014-09-28 04:44:06