我需要将awk转换为独立的bash脚本的帮助

时间:2019-06-01 23:09:18

标签: bash awk

需要帮助将以下内容转换为独立代码。

awk '{ for (i=1; i<=NF; i++) {a[NR,i] = $i} }
    NF>p { p = NF }
    END {
        for(j=1; j<=p; j++) {
            str=a[1,j]
            for(i=2; i<=NR; i++)
        {str=str"   "a[i,j];}
        printf str"\n"}
    }' $temp_input

1 个答案:

答案 0 :(得分:2)

我不确定我是否正确理解了这个问题。如果您想要一个脚本在作为参数提供的任何文件上执行该awk代码,则根本不需要bash;您可以制作一个awk脚本:

#!/usr/bin/awk -f
{ for (i=1; i<=NF; i++) {a[NR,i] = $i} }
NF>p { p = NF }
END {
    for(j=1; j<=p; j++) {
        str=a[1,j]
        for(i=2; i<=NR; i++)
    {str=str"   "a[i,j];}
    printf str"\n"}
}

如果您想要一个bash包装器,可以执行以下操作:

#!/bin/bash
awk '{ for (i=1; i<=NF; i++) {a[NR,i] = $i} }
    NF>p { p = NF }
    END {
        for(j=1; j<=p; j++) {
            str=a[1,j]
            for(i=2; i<=NR; i++)
        {str=str"   "a[i,j];}
        printf str"\n"}
    }' "$@"

(请注意,"$@"是传递传递给脚本的参数的标准方法。)

在任何一种情况下,您都应为脚本添加执行权限(例如,如果您将脚本命名为rotatefields,则应使用chmod +x rotatefields)。然后将其放在$PATH中的一个目录中,然后按名称运行(例如rotatefields filetorotate),或者从与./rotatefields filetorotate所在的目录中运行,或者在其他目录中,请指定完整路径(/path/to/rotatefields filetorotate)。

(注意:不要sh rotatefields来运行它们-会覆盖shebang行并以普通的sh来运行,这会引起麻烦。)