如何将命令行awk脚本(带参数)作为bash脚本运行?
我有一个awk脚本(tst.awk): (注意:参数的数量可以是可变的) 如何更改此脚本和命令行代码以将其作为bash脚本运行 我试过(tst_awk.sh): 我也尝试过(tst_awk2.sh): 通过以下命令行调用:如何将命令行awk脚本(带参数)作为bash脚本运行?,bash,awk,Bash,Awk,我有一个awk脚本(tst.awk): (注意:参数的数量可以是可变的) 如何更改此脚本和命令行代码以将其作为bash脚本运行 我试过(tst_awk.sh): 我也尝试过(tst_awk2.sh): 通过以下命令行调用: awk -f tst.awk master file1 file2 file3 > output.file ./tst_awk.sh master file1 file2 file3 /tst_awk2.sh-f后面需要跟一个awk脚本的名称。您正在将shell脚本
awk -f tst.awk master file1 file2 file3 > output.file
./tst_awk.sh master file1 file2 file3
/tst_awk2.sh
-f
后面需要跟一个awk
脚本的名称。您正在将shell脚本的第一个参数放在它之后
您可以使用“$@”
获取所有脚本参数,因此不限于4个参数
#!/bin/bash
awk -f /path/to/tst.awk "$@" > output_file
使用awk脚本的绝对路径,以便可以从任何目录运行shell脚本
如果不想使用单独的tst.awk
,只需将脚本作为awk
的第一个文本参数
#!/bin/bash
awk 'NR==FNR {
ids[++numIds] = $1","
next
}
FNR==1 { numFiles++ }
{
id = $1
sub(/^[^[:space:]]+[[:space:]]+/,"")
vals[id,numFiles] = $0
gsub(/[^[:space:],]+/,"NA")
naVal[numFiles] = $0
}
END {
for ( idNr=1; idNr<=numIds; idNr++) {
id = ids[idNr]
printf "%s%s", id, OFS
for (fileNr=1; fileNr<=numFiles; fileNr++) {
val = ((id,fileNr) in vals ? vals[id,fileNr] : naVal[fileNr])
printf "%s%s", val, (fileNr<numFiles ? OFS : ORS)
}
}
}' "$@" > output_file
#/bin/bash
awk'NR==FNR{
ids[++numIds]=1美元“
下一个
}
FNR==1{numFiles++}
{
id=$1
子(/^[^[:space:]+[:space:]+/,“”)
VAL[id,numFiles]=0美元
gsub(/[^[:空格:,]+/,“NA”)
海军[numFiles]=0美元
}
结束{
for(idNr=1;idNr-f
后面需要跟一个awk
脚本的名称。您将shell脚本的第一个参数放在它后面
您可以使用“$@”
获取所有脚本参数,因此不限于4个参数
#!/bin/bash
awk -f /path/to/tst.awk "$@" > output_file
使用awk脚本的绝对路径,以便可以从任何目录运行shell脚本
如果不想使用单独的tst.awk
,只需将脚本作为awk
的第一个文本参数
#!/bin/bash
awk 'NR==FNR {
ids[++numIds] = $1","
next
}
FNR==1 { numFiles++ }
{
id = $1
sub(/^[^[:space:]]+[[:space:]]+/,"")
vals[id,numFiles] = $0
gsub(/[^[:space:],]+/,"NA")
naVal[numFiles] = $0
}
END {
for ( idNr=1; idNr<=numIds; idNr++) {
id = ids[idNr]
printf "%s%s", id, OFS
for (fileNr=1; fileNr<=numFiles; fileNr++) {
val = ((id,fileNr) in vals ? vals[id,fileNr] : naVal[fileNr])
printf "%s%s", val, (fileNr<numFiles ? OFS : ORS)
}
}
}' "$@" > output_file
!/bin/bash
awk'NR==FNR{
ids[++numIds]=1美元“
下一个
}
FNR==1{numFiles++}
{
id=$1
子(/^[^[:space:]+[:space:]+/,“”)
VAL[id,numFiles]=0美元
gsub(/[^[:空格:,]+/,“NA”)
海军[numFiles]=0美元
}
结束{
对于(idNr=1;idNr,您可以通过添加shebang使awk
脚本可执行
#! /bin/awk -f
NR==FNR {
ids[++numIds] = $1","
next
}...
别忘了chmod+x tst.awk
跑
通过添加shebang,可以使awk
脚本可执行
#! /bin/awk -f
NR==FNR {
ids[++numIds] = $1","
next
}...
别忘了chmod+x tst.awk
跑
使用awk'…'主文件1文件2文件3>输出.文件
(将..
替换为tst.awk中的awk脚本
)使用awk'…'主文件1文件2文件3>输出.文件
(将..
替换为tst.awk中的awk脚本
)非常好!感谢您提供了更多信息。第一次看到“$”。非常好!感谢您提供更多信息。第一次看到“$@”。请参阅了解为什么不这样做的一些原因。请参阅了解为什么不这样做的一些原因。
$ ./tst.awk master file1 file2 file3 > outfile