[英]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.