gpt4 book ai didi

bash - (bash 脚本)如何对文件中位于 'n' 位置倍数的行进行排序?

转载 作者:行者123 更新时间:2023-12-04 18:36:42 25 4
gpt4 key购买 nike

我必须在 ubuntu linux 中用 bash 语言编写一个脚本,它必须在命令行中接受三个参数:首先是我必须对其行进行排序的文件的名称,其次是一个字母(如果我想按字母顺序排序,则为“a”升序或'z',如果我想按字母降序排序)和第三个正数'n'。我只需要对“n”的倍数的行进行排序。例如,如果我有一个包含 100 行且 n=5 的文本文件,那么我只需对第 5、10、15、...、100 行进行排序,其余的必须保持不变。这可以做到吗?
我可以像这样找到并排序“n”倍数的行:

awk "NR%$n==0" archivo.txt | sort -f 

但现在我不知道如何将这些行再次写入文件。

感谢关注

最佳答案

如果您不介意将整个输入文件放入内存中,则可以使用 gawk,以便可以在打印之前对行子集进行排序。

#!/usr/bin/env gawk -f

BEGIN {
if (!inc) inc=5 # set a default
}

NR%inc {
# This is a normal line
nosort[NR]=$0
next
}

{
# This is an increment of "inc"
tosort[NR]=$0
}

END {
# Sort the array of increments
asort(tosort)

# Step through our two arrays, picking what to print based on the modulo
n=0
for (i=1; i<NR; i++)
if (i%inc==0)
print tosort[++n]
else
print nosort[i]
}

您可以使用以下方式运行它:
$ ./sortthing -v inc=5 inputfile

请注意,这使用了 gawk 函数 asort() ,在 One True awk 中不存在。因此,如果您在 *BSD 或 OS X 上执行此操作,您可能需要安装其他工具。

关于bash - (bash 脚本)如何对文件中位于 'n' 位置倍数的行进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42320048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com