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

时间:2019-04-09 16:10:58

标签: arrays bash

我有一个文本文件,其中包含以下文本行:

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)

3 个答案:

答案 0 :(得分:2)

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

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

这将在所有空格上分割,而不仅仅是换行符。它还将扩展使用*?的所有glob。最好使用readarrayprocess 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就会提供一个直接命令替换具有广泛的功能。