我有一个充满随机字符串的文件,如下所示,我想从中间开始和结束文件排序。 如果总线是奇数,我想从中心线开始,然后是中央1,中央+ 1,中央2,中央+ 2。 如果总线数是偶数,我想从总线数/ 2开始,反之亦然。
该文件大约100MB,我正在使用2G内存的VPS上运行。
我可以在unix-like平台下使用工具。我怎么做? 如果有这样的号码序列的名称,请告诉我。 感谢。
-----------------BEFORE
line1
line2
line3
line4
line5
line6
line7
-----------------
-----------------AFTER
line4
line3
line5
line2
line6
line1
line7
-----------------
答案 0 :(得分:0)
如果输入中有偶数行N,则从行N÷2开始,然后添加+1,-2,+ 3,-4,...以获取序列中的下一个条目。如果N = 8,则序列为4,5,3,6,2,7,1,8。
如果输入中有奇数行N,则以行(N + 1)÷2开始,然后加-1,+ 2,-3,+ 4,...以获取下一个条目顺序。如果N = 7,则序列为4,3,5,2,6,1,7。
这可以在awk
中相当简单地实现,方法是将输入行插入数组,然后按照演示的顺序打印它们。
$ cat script.awk
{ line[++N] = $0 }
END {
if (N > 0)
{
j = (-1) ** (N % 2)
n = int((N + 1) / 2)
for (i = 1; i <= N; i++)
{
print line[n]
n += j * i
j = -j
}
}
}
$ seq -f "line%.0f" 1 7 | awk -f script.awk
line4
line3
line5
line2
line6
line1
line7
$ seq -f "line%.0f" 1 8 | awk -f script.awk
line4
line5
line3
line6
line2
line7
line1
line8
$