我在写入以下bash脚本后将输入文件拆分为两个以便签名: splitfiles文件名0.9 其中0.9是训练集比例,休息是测试集。
editTextFullName = (EditText) findViewById(R.id.editTextFullName);
但是它会抛出文件110-1.txt
的错误$ splitfiles 110-1.txt 0.9
bash:4756073 110-1.txt * 0.9:表达式中的语法错误(错误标记为“110-1.txt * 0.9”)
答案 0 :(得分:1)
替换
@Entity(name = "Person")
public static class Person {
@Id
@GeneratedValue
private Long id;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private List<Phone> phones = new ArrayList<>();
public Person() {
}
public List<Phone> getPhones() {
return phones;
}
}
@Entity(name = "Phone")
public static class Phone {
@Id
@GeneratedValue
private Long id;
private String number;
public Phone() {
}
public Phone(String number) {
this.number = number;
}
public Long getId() {
return id;
}
public String getNumber() {
return number;
}
}
CREATE TABLE Person (
id BIGINT NOT NULL ,
PRIMARY KEY ( id )
)
CREATE TABLE Person_Phone (
Person_id BIGINT NOT NULL ,
phones_id BIGINT NOT NULL
)
CREATE TABLE Phone (
id BIGINT NOT NULL ,
number VARCHAR(255) ,
PRIMARY KEY ( id )
)
ALTER TABLE Person_Phone
ADD CONSTRAINT UK_9uhc5itwc9h5gcng944pcaslf
UNIQUE (phones_id)
ALTER TABLE Person_Phone
ADD CONSTRAINT FKr38us2n8g5p9rj0b494sd3391
FOREIGN KEY (phones_id) REFERENCES Phone
ALTER TABLE Person_Phone
ADD CONSTRAINT FK2ex4e4p7w1cj310kg2woisjl2
FOREIGN KEY (Person_id) REFERENCES Person
通过
wc -l $1
避免输出中的文件名。
答案 1 :(得分:1)
您可以使用此awk
命令替换splitfiles
功能:
awk -v lines=$(wc -l < "$1") -v fact="$2" 'NR <= lines * fact {
print > "traintxt"; next} {print > "valtxt"}' "$1"
答案 2 :(得分:1)
如果你想随机拆分文件你可以使用另一个awk one liner来使用awk的rand()函数来概率地拆分文件:
awk '{if(rand()<0.9) {print > output.train} else {print > output.test}}' input
如果你需要对文件名进行参数化,那就有点复杂了,因为你需要使用-v开关将它们传递给awk:
in="myLibSVMdata"
train="$in.train"
test="$in.test"
awk -v train="$train" -v test="$test" '{if(rand()<0.9) {print > train} else {print > test}}' $in
答案 3 :(得分:0)
要对@Rob Challen的回答进行些微改进:我将其设置为一个函数,该比率也可以控制,并且可以确保可以创建train和test / dev文件并将其附加到该函数中。
function split_train_val(){
in=$1
train=$2
test=$3
ratio=$4
echo "" > $train
echo "" > $test
awk -v train="$train" -v test="$test" '{if(rand()<$ratop) {print > train} else {print > test}}' $in
}
答案 4 :(得分:0)
如果@Rob Challen的答案对您不起作用,请尝试以下操作:
awk '{if(rand()<0.9) {print $0 > "output.train"} else {print $0 > "output.test"}}' input