我有这个脚本,它旨在修剪指定为脚本参数的字段。即sh script.sh file.txt "|" 2
#!/bin/bash
filename="$1"
delim="$2"
arg="$3"
gsubber=""gsub("^[ t]*|[ t]*$","",'$$arg')""
myout=`nawk -F"$delim" -v fl="$gsubber" '{ { fl } }1' OFS="$delim" "$filename"`
echo "$myout"
所以这个文件"file.txt"作为输入:
sid|storeNo|latitude
9| gerdy| fd¿kjhn422-405
0000543210 |gfdjk39
gfd|fd||fd
变成这个输出:
sid|storeNo|latitude
9|gerdy| fd¿kjhn422-405
0000543210 |gfdjk39
gfd|fd||fd
我收到以下错误:nawk:源行1处出现语法错误上下文是
'<lt<缺少}nawk:在1号源线进行救援
一旦有人能够帮助提供正确的语法,我就可以毫不费力地扩展它以支持多个字段。即CCD_ 2然后可以仅修剪第二和第三场。
提前感谢!
尝试:
#!/bin/bash
filename=$1
delim=$2
arg=$3
regex='^[ t]*|[ t]*$'
myout=$(
nawk -F"$delim" -v regex="$regex" -v arg="$arg" '
{ gsub(regex, "", $arg) }
1' OFS="$delim" "$filename"
)
printf '%sn' "$myout"
编辑:
为了处理参数中的多个字段(请参阅下面的注释):
#!/bin/bash
filename=$1
delim=$2
shift 2
args=$@
regex='^[ t]*|[ t]*$'
myout=$(
nawk -F"$delim" -v regex="$regex" -v args="$args" '{
n = split(args, t, " ")
for (i = 0; ++i <=n;)
gsub(regex, "", $t[i])
}1' OFS="$delim" "$filename"
)
printf '%sn' "$myout"
这应该有效:
#!/bin/bash
filename="$1"
delim="$2"
arg="$3"
myout=`nawk -F"$delim" -v f="$arg" '{gsub(/^[ t]*|[ t]*$/,"",$f) }1' OFS="$delim" "$filename"`
echo "$myout"
您不必提取gsub,因为在gsub函数调用中,只有字段索引是可变的。您可以将字段索引作为var传递给awk。