使用awk拆分时删除文件名中的错误字符

使用awk拆分时删除文件名中的错误字符,awk,sh,Awk,Sh,我有一个用awk拆分的大文件,使用最后一列作为新文件的名称,但其中一列包含“/”,这会导致无法打开错误 我尝试创建一个函数来转换文件名,但awk在我运行它时没有使用它,可能是因为以下部分出错: tried_func() { echo $1 | tr "/" "_" } awk -F ',' 'NR>1 {fname="a_map/" tried_func $NF".csv"; print >> fname; close(fname)}' large_file.csv

我有一个用awk拆分的大文件,使用最后一列作为新文件的名称,但其中一列包含“/”,这会导致无法打开错误

我尝试创建一个函数来转换文件名,但awk在我运行它时没有使用它,可能是因为以下部分出错:

tried_func() {
 echo $1 | tr "/" "_"
}


awk -F ',' 'NR>1 {fname="a_map/" tried_func $NF".csv"; print >> fname; 
close(fname)}' large_file.csv
大文件.csv

A,        row,    I don't,  need
plenty,   with,   columns,  good_name
alot,     off,    them,     another_good_name
more,     more,   more,     bad/name
预期收益:

文件i a_映射列表:

  • good_name.csv
  • 另一个好名字.csv
  • 错误名称.csv
实际资源:

awk: can't open file a_map/bad/name.csv

不需要是一个函数,如果我可以跳过awk中的“/”的话,那也太棒了

Awk不是shell的一部分,它是一种独立的编程语言,因此不能以这种方式调用shell函数。相反,只需在awk内完成全部工作:

$ awk -F ',' '
NR>1 {
    gsub(/\//,"_",$NF)          # replace /s with _s 
    fname="a_map/" $NF ".csv"
    print >> fname
    close(fname)
}' file

顺便说一下,您的意思是
echo“$1”
。也请看,谢谢,我希望是这样简单的事情!工作起来很有魅力!也不知道这是它自己的语言!很高兴知道,因为我的工作太棒了。