Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm AWK-对行重新排序并将其分块_Algorithm_Unix_Awk - Fatal编程技术网

Algorithm AWK-对行重新排序并将其分块

Algorithm AWK-对行重新排序并将其分块,algorithm,unix,awk,Algorithm,Unix,Awk,我有一个文件,有数千行这方面的内容,它划分块是字段6中的单词“提名”。每个块必须分为两个子块,一个子块包含字段1中不包含字母“j”(例如:magasabbikaiké)的单词,另一个子块包含字母“j”(例如:magasabbikaiké)的单词 期望输出: magasabbikaiké /j/aiké plural 3pl singular nominative magasabbikaikét /j/aikét plural 3pl singular accusative

我有一个文件,有数千行这方面的内容,它划分块是字段6中的单词“提名”。每个块必须分为两个子块,一个子块包含字段1中不包含字母“j”(例如:magasabbikaiké)的单词,另一个子块包含字母“j”(例如:magasabbikaiké)的单词

期望输出:

magasabbikaiké  /j/aiké plural  3pl singular    nominative
magasabbikaikét /j/aikét    plural  3pl singular    accusative
magasabbikaikénak   /j/aikénak  plural  3pl singular    dative
magasabbikaikéval   /j/aikéval  plural  3pl singular    instrumental
magasabbikaikéért   /j/aikéért  plural  3pl singular    causal-final
magasabbikaikévá    /j/aikévá   plural  3pl singular    translative
magasabbikaikéig    /j/aikéig   plural  3pl singular    terminative
magasabbikaikéban   /j/aikéban  plural  3pl singular    inessive
magasabbikaikén /j/aikén    plural  3pl singular    superessive
magasabbikaikénál   /j/aikénál  plural  3pl singular    adessive
magasabbikaikéba    /j/aikéba   plural  3pl singular    illative
magasabbikaikéra    /j/aikéra   plural  3pl singular    sublative
magasabbikaikéhoz   /j/aikéhoz  plural  3pl singular    allative
magasabbikaikéból   /j/aikéból  plural  3pl singular    elative
magasabbikaikéról   /j/aikéról  plural  3pl singular    delative
magasabbikaikétól   /j/aikétól  plural  3pl singular    ablative

magasabbikjaiké /j/aiké plural  3pl singular    nominative
magasabbikjaikét    /j/aikét    plural  3pl singular    accusative
magasabbikjaikénak  /j/aikénak  plural  3pl singular    dative
magasabbikjaikéval  /j/aikéval  plural  3pl singular    instrumental
magasabbikjaikéért  /j/aikéért  plural  3pl singular    causal-final
magasabbikjaikévá   /j/aikévá   plural  3pl singular    translative
magasabbikjaikéig   /j/aikéig   plural  3pl singular    terminative
magasabbikjaikéban  /j/aikéban  plural  3pl singular    inessive
magasabbikjaikén    /j/aikén    plural  3pl singular    superessive
magasabbikjaikénál  /j/aikénál  plural  3pl singular    adessive
magasabbikjaikéba   /j/aikéba   plural  3pl singular    illative
magasabbikjaikéra   /j/aikéra   plural  3pl singular    sublative
magasabbikjaikéhoz  /j/aikéhoz  plural  3pl singular    allative
magasabbikjaikéból  /j/aikéból  plural  3pl singular    elative
magasabbikjaikéról  /j/aikéról  plural  3pl singular    delative
magasabbikjaikétól  /j/aikétól  plural  3pl singular    ablative

magasabbikaikéi /j/aikéi    plural  3pl plural  nominative
magasabbikaikéit    /j/aikéit   plural  3pl plural  accusative
....

magasabbikjaikéi    /j/aikéi    plural  3pl plural  nominative
magasabbikjaikéit   /j/aikéit   plural  3pl plural  accusative
....
我所做的:

BEGIN {
    FS="\t";
}
{
    id="nominative"
    if ($6 != id)
    {
        split(line_3,A,"\n")

        if (match($1,"j")==0)
        {
            line_1=line_1 $0"\n";
        }
        else
        {
            line_2=line_2 $0"\n";
        }
        line_3="";
    }
    else
    {
        line_3=line_3 $0"\n";
        print A[1]"\n"line_1;
        print A[2]"\n"line_2;

        line_1="";
        line_2="";
    }
}

不太清楚您想要实现什么,但我认为您想要:

  • 您的文件有块。块以标记为“提名”的行开始,但可能有几个连续的“提名”条目,它们属于同一块。每个块还包含其他案例的其他条目
  • 在每个块中都有带j的单词和不带j的单词。您希望为每类单词的每个块创建两个子块
  • 您希望打印出按空格分隔的子块。数据没有改变,只是重新排列
我认为您可以直接打印不带j的条目,并将带有j的条目保存在临时字符串中。跟踪当前行和前一行是否为主格。如果当前行是主格,而前一行不是主格,则刷新并重置临时字符串

第一行之前的行被人为设置为非主格。您还必须刷新末尾的临时字符串

BEGIN {
    FS = "\t";
    id = "nominative";

    prev = 0;                       # was last line "nominative"?
    withj = "";                     # temporary string for words with j
}

{
    curr = ($6 == id)               # is this line "nominative"?

    if (curr && !prev) {            # begin a new block
        print "";

        if (withj) {
            print withj;
            print "";
        }

        withj = "";
    } 

    if (match($1, "j")) {           # separate j and non-j
        withj = withj $0 "\n";
    } else {
        print;
    }

    prev = curr;
}

END {
    print "";                       # flush everything at the end
    print withj;
    print "";
}
BEGIN {
    FS = "\t";
    id = "nominative";

    prev = 0;                       # was last line "nominative"?
    withj = "";                     # temporary string for words with j
}

{
    curr = ($6 == id)               # is this line "nominative"?

    if (curr && !prev) {            # begin a new block
        print "";

        if (withj) {
            print withj;
            print "";
        }

        withj = "";
    } 

    if (match($1, "j")) {           # separate j and non-j
        withj = withj $0 "\n";
    } else {
        print;
    }

    prev = curr;
}

END {
    print "";                       # flush everything at the end
    print withj;
    print "";
}