繁体   English   中英

读取文件文本的奇数行并添加到bash中的数组

[英]Read odd lines of a file text an add to a array in bash

我有一个带有以下文本行的文本文件:

https://i.imgur.com/9iLSS35.png
Delete page: https://imgur.com/delete/SbmZQDht9Xk2NbW
https://i.imgur.com/9iLSS336.png
Delete page: https://imgur.com/delete/SbmZQDht9Xk2NbW
https://i.imgur.com/9iLSS37.png
Delete page: https://imgur.com/delete/SbmZQDht9Xk2NbW

我需要读取奇数行并添加到bash中的数组。 我尝试了以下代码,但它会生成变量,而不是所需的数组。

A=$(sed -n 1~2p ./upimagen.txt)

如何读取文本文件的奇数行并将每一行添加到数组中,然后分别访问?

结果将是:

${A[0]}
https://i.imgur.com/9iLSS35.png
${A[1]}
https://i.imgur.com/9iLSS336.png
...

数组分配需要一组外部括号。

A=($(sed -n 1~2p ./upimagen.txt))

但是,这将在所有空格上分割,而不仅仅是换行符。 它还将扩展使用*?所有glob ? 最好使用readarray加上进程替换来确保按原样保留每一行:

readarray -t A < <(sed -n 1~2p ./upimagen.txt)

使用awk

readarray -t A < <(awk 'NR%2' ./upimagen.txt)

使用awk对John的回答仅作一些awk 使用readarray或从进程替换读取的同义mapfile可能是您最好的选择,例如

 readarray -t A < <(awk 'FNR % 2 {print $1}' ./upimagen.txt)

尽管使用命令替换进行的直接初始化没有什么问题,例如A=( $(...) ) ,但是如果文件很大,或者只需要部分行范围,或者说您具有自定义函数如果要在读取的每X个元素上运行, mapfile/readarray可以提供比直接命令替换更多的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM