使用bash将行拆分为训练集和验证集

时间:2016-03-04 06:29:08

标签: bash awk

我在写入以下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”)

5 个答案:

答案 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