Algorithm AWK-对行重新排序并将其分块
我有一个文件,有数千行这方面的内容,它划分块是字段6中的单词“提名”。每个块必须分为两个子块,一个子块包含字段1中不包含字母“j”(例如:magasabbikaiké)的单词,另一个子块包含字母“j”(例如:magasabbikaiké)的单词 期望输出: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
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的单词。您希望为每类单词的每个块创建两个子块
- 您希望打印出按空格分隔的子块。数据没有改变,只是重新排列
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 "";
}