【问题标题】:Awk command result into arrayawk 命令结果放入数组
【发布时间】:2013-07-07 13:21:17
【问题描述】:

我有一个包含以下内容的文本文件:

Hello 4
Bye 2
Toto 2

我想将每行的第一个字符串放入 MyArray1,将整数放入另一个 MyArray2。

我写了这个,但它不起作用。

#!/bin/bash

countline=$(awk '{ print $1 }'  test | wc -l)


for ((i=0; i<$countline ;i=i+1))

    do

        MyArray1[$i]=awk '{ print $1 }'  test
done


for ((i=0; i<$countline ;i=i+1))

    do

        MyArray2[$i]=awk '{ print $2 }'  test
done

请帮帮我。

【问题讨论】:

  • 注意,这样更简单更快:countline=$(wc -l &lt; test)

标签: arrays linux bash


【解决方案1】:

这样就可以了:

while read -r f1 f2; do 
    ary1+=("$f1")
    ary2+=("$f2")
done < file

$ printf "%s\n" "${ary1[@]}"
Hello
Bye
Toto

$ printf "%s\n" "${ary2[@]}"
4
2
2

或者你可以使用cut

arryone=( $(cut -d ' ' -f1 file) )
arrytwo=( $(cut -d ' ' -f2 file) )

【讨论】:

  • 只是为了指出bash 数组有多么奇怪,以下也可以:while read -r ary1[i] ary2[i]; do (( i++ )); done(只要i 开头为 0 或未设置)。
  • 啊@chepner 现在太漂亮了!谢谢,我不知道。
  • +1 用于只读取文件一次的解决方案......并且没有额外的外部进程......
【解决方案2】:

保持简单:

MyArray1=( $(awk '{ print $1 }' test) )
MyArray2=( $(awk '{ print $2 }' test) )

您不需要对 awk 的输出进行迭代和循环,并且可以直接创建您的数组,如上所示。

【讨论】:

    猜你喜欢
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2012-06-07
    • 1970-01-01
    • 2018-07-15
    相关资源
    最近更新 更多