由 awk 在 bash 中创建的索引变量
Posted
技术标签:
【中文标题】由 awk 在 bash 中创建的索引变量【英文标题】:Indexing variable created by awk in 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,使用额外的一对括号使它像我想要的那样工作。
【参考方案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
【讨论】:
以上是关于由 awk 在 bash 中创建的索引变量的主要内容,如果未能解决你的问题,请参考以下文章
怎么给bash shell当中的变量获取awk行处理后得到的值