使用awk拆分时删除文件名中的错误字符
我有一个用awk拆分的大文件,使用最后一列作为新文件的名称,但其中一列包含“/”,这会导致无法打开错误 我尝试创建一个函数来转换文件名,但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
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”
。也请看,谢谢,我希望是这样简单的事情!工作起来很有魅力!也不知道这是它自己的语言!很高兴知道,因为我的工作太棒了。