Bash 将文件块拆分为数组

Bash 将文件块拆分为数组

我有命令将文件拆分成两行块 split -l 2 urls.txt

它会创建一些随机文件。我有一个场景,我想将其拆分urls.txt成 2 行块,就像 php str_split 一样,然后循环每个 5 行块。

所以如果urls.txt是:

example1.com
example2.com
example3.com
example4.com
example5.com

分割后的数组将是

array
0 {
example1.com
example2.com
}

1 {
example3.com
example4.com
}

2 {
example5.com
}

我使用 head -5 urls.txt 但我不知道如何循环它并增加每 n 个数字

答案1

tail如果我理解了这个问题,那么你将需要和的组合head,或者另一个类似的工具sed。考虑到你想坚持使用tailhead,你可以这样做:

tail -n +${first_line} | head -n ${number_of_lines}

在其中man 1 tail找到-n参数:

-n, --lines=[+]NUM
          output the last NUM lines, instead of the last 10; or use 
          -n +NUM to output starting with line NUM

因此,tail -n +10将从文件的第 10 行开始打印所有内容。只需${first_line}根据需要增加并设置正确的${number_of_lines}

如果这对于您的用例来说还不够快,您应该看看man 1 sed。使用sed,您可以完成与上述相同的操作:

sed ${first_line},+${number_of_lines}\!d

您要做的就是删除输入中除从到 之间sed的所有行。${first_line}${first_line} + ${number_of_lines}

相关内容