使用Awk

时间:2016-07-07 14:02:39

标签: linux shell awk scripting

我编写了以下内容:

ARRAY=($(awk 'FS = ";" {print $3}' file.txt))

LINE_CREATOR=`echo "aaaa;bbbb;cccccccc" |

'{awk -F";"};

END

 for (i in ARRAY)
         {

         print $'${ARRAY['i']}'

         }

}'`

File.txt看起来像

1;8;3
4;6;1
7;9;2

说明:

数组包含值:3 1 2

所以循环将在数组上循环,并使用awk从“aaaa; bbbb; cccccccc”中提取字段$ 3 $ 1 $ 2

,最终输出应为此

ccccccccaaaabbbb

启动脚本时我仍然遇到一些错误。

2 个答案:

答案 0 :(得分:1)

我在这里做了一些猜测,但我认为这可以做你想要的:

$ echo "aaaa;bbbb;cccccccc" | awk -F\; 'NR == FNR { n = split($0, a); next } 
{ printf "%s", a[$3] } END { print "" }' - file
ccccccccaaaabbbb

NR == FNR表示该块仅针对第一个输入运行。 -作为参数告诉awk首先从标准输入中读取。该字符串在FS;)上拆分为数组anext会跳过脚本的其余部分。

第二个块仅针对第二个输入(文本文件)运行。第三个字段中的值用于打印数组a中的元素。

答案 1 :(得分:0)

如果你想将索引作为awk变量传递,这是另一种方式

$  awk -F';' -v ix="$(cut -d\; -f3 file | paste -sd\;)" '
           BEGIN{n=split(ix,a)} 
                {for(i=1;i<n;i++) printf "%s",$a[i]; 
                 printf "%s\n",$a[n]}' <<< "aaaa;bbbb;cccccccc"

ccccccccaaaabbbb