需要帮助将以下内容转换为独立代码。
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
答案 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
来运行,这会引起麻烦。)