gpt4 book ai didi

linux - awk 中的 printf 格式说明符不适用于多个参数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:24 25 4
gpt4 key购买 nike

我正在尝试用 Bash 编写一个名为 example7 的程序脚本它接受参数:一个文件名(我们称之为文件 1)和一个列表数字(下面我们将其称为列表 1),程序需要做的是将列打印为输出根据列表 1 中的数字将它们重新安排到右侧或左侧后的文件 1。(这可以通过使用 awk 的 printf 命令获得)。

例子

假设一个F1文件的内容是:

A abcd ddd eee zz tt
ab gggwe 12 88 iii jjj
yaara yyzz 12abcd xyz x y z

通过命令运行程序后:

example7 F1 -8 -7 6 4

输出:

A       abcd      ddd eee
ab gggwe 12 88
yaara yyzz 12abcd xyz

在上面的例子中 AABCD 之间有 7 个空格,在 abcdddd 之间dddeee 之间有 6 个空格有一个空格。

另一个例子:

通过命令运行程序后:

example7 F1 -8 -7 6 4 5

输出:

A       abcd      ddd eee   zz
ab gggwe 12 88 iii
yaara yyzz 12abcd xyz x

在上面的例子中 AABCD 之间有 7 个空格,在 abcdddd 之间dddeee 之间有 6 个空格eeezz之间有一个空格,88iii之间有3个空格有两个空格,xyzx 之间有 4 个空格。

我试过这样做:

file=$1
shift
awk '{printf "%'$1's\n" ,$1}' $file

但它只适用于一个数字和一个参数,我不知道如何对多列和多个参数执行此操作。任何帮助将不胜感激。

最佳答案

为所有剩余的参数设置一个 awk 变量,然后拆分它并循环遍历它们。

file=$1
shift
awk -v sizes="$*" '{words = split(sizes, s); for(i = 1; i <= words; i++) printf("%" s[i] "s", $i); print ""; }' "$file"

尝试将 shell 变量直接替换到 awk 脚本中通常是错误的。您应该更喜欢使用 -v 设置 awk 变量,然后使用 awk 自己的字符串连接操作,就像我对 s[i].

关于linux - awk 中的 printf 格式说明符不适用于多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48020952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com