【问题标题】:Indexing variable created by awk in bash由 awk 在 bash 中创建的索引变量
【发布时间】:2016-01-30 01:29:53
【问题描述】:

我在使用 awk 索引从文本文件派生的变量(由 1 行和 4 个值组成)时遇到了一些问题。

特别是,我有一个包含循环所有输入信息的文本文件。每行包含 4 个特定的输入值,每次迭代都使用输入文件的不同行。

输入文件如下所示:

/home/hannelore/TVB-pipe_local/subjects/CON02T1/ 10012 100000 1001 --> used for iteration 1
/home/hannelore/TVB-pipe_local/subjects/CON02T1/ 10013 7200 1001 --> used for iteration 2
...

从这个输入文本文件中,我确定了不同的列(路径、种子、计数、目标),然后我想在循环的每次迭代中索引这些变量。但是,索引 0 返回整个变量,更高的索引返回没有输出。在这个获得的变量上使用 awk、cut 或 IFS,我无法拆分该变量。谁能帮我解决这个问题?

我使用的一些代码:

seed=$(awk '{print $2}' $input_file) 

--> 从输入文件中提取列信息,这可行

seedsplit=$(awk '{print $2}' $seed)

seedsplit=$(cut -f2 -d ' ' $seed)"

提前谢谢你!

亲切的问候,

汉内洛尔

【问题讨论】:

  • 我不明白你在 seedsplit 作业中做了什么。 awk 的第二个参数是文件名,但 $seed 包含输入文件字段 2 中的所有值。
  • 信息不足。这些路径位置有哪些文件?它们包含什么,你想从中提取什么?
  • 您要索引什么变量?我在您的代码中没有看到任何数组。
  • 也许你想做的是将seed 设为一个数组:seed=($(awk '{print $2}' $input_file))。然后就可以使用${seed[0]}${seed[1]}等索引了。
  • 谢谢,Barmar,使用额外的一对括号使它像我想要的那样工作。

标签: bash indexing awk string-split


【解决方案1】:

如果我理解正确,您想逐行从输入文件中提取值。

while read a b c d; do echo "var1:" ${a}; done < file

将打印

var1: /home/hannelore/TVB-pipe_local/subjects/CON02T1/
var1: /home/hannelore/TVB-pipe_local/subjects/CON02T1/

类似地,您可以访问 b、c 和 d 中的其他变量。

【讨论】:

    【解决方案2】:

    如果你想要一个数组,那么使用数组赋值表示法:

    seed=( $(awk '{print $2}' $input_file) )
    

    现在您将在一个单独的数组元素中拥有来自awk 的每一行输出中的单词。

    col1=( $(awk '{print $1}' $input_file) )
    col3=( $(awk '{print $3}' $input_file) )
    

    现在您有了三个可以并行索引的数组。

    for i in $(seq 1 "${#col1[@]}"
    do
        echo "${col1[$i]} in col1; ${seed[$i]} in col2; ${col3[$i]} in col3"
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 2011-03-07
      • 2015-08-14
      相关资源
      最近更新 更多