我编写了以下内容:
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
启动脚本时我仍然遇到一些错误。
答案 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
(;
)上拆分为数组a
。 next
会跳过脚本的其余部分。
第二个块仅针对第二个输入(文本文件)运行。第三个字段中的值用于打印数组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