我有一个文本文件,其中包含以下文本行:
Option Explicit
Sub test()
Dim textFromEmail As String
textFromEmail = "Request ID: 527" & vbNewLine & _
"Results: [06-641-20_XABY_C-terminally designated_region A, 46-643-00_AASC_C-terminally designated_region C, 06-642-60_TTTS_C-terminally designated_region S] "
Debug.Print Replace(textFromEmail, ",", vbNewLine)
End Sub
我需要读取奇数行并添加到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
如何读取文本文件的奇数行并将每行添加到数组中,然后分别访问?
结果将是:
A=$(sed -n 1~2p ./upimagen.txt)
答案 0 :(得分:2)
数组分配需要一组外部括号。
A=($(sed -n 1~2p ./upimagen.txt))
这将在所有空格上分割,而不仅仅是换行符。它还将扩展使用*
或?
的所有glob。最好使用readarray
加process substitution来确保每一行都按原样保留:
readarray -t A < <(sed -n 1~2p ./upimagen.txt)
答案 1 :(得分:0)
使用awk
:
readarray -t A < <(awk 'NR%2' ./upimagen.txt)
答案 2 :(得分:0)
使用awk
对John的回答稍有变化。从进程替换使用readarray
或同义词mapfile
可能是您最好的选择,例如
readarray -t A < <(awk 'FNR % 2 {print $1}' ./upimagen.txt)
虽然使用命令替换的直接初始化没有任何问题,例如A=( $(...) )
,如果文件很大,或者只需要行范围的一部分,或者说您要在每个读取的X个元素上运行一个自定义函数,mapfile/readarray
就会提供一个直接命令替换具有广泛的功能。