我有一个大文件,我用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
Large_file.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_map的列表:
实际分辨率:
awk: can't open file a_map/bad/name.csv
如果我也可以跳过fab的awk中的“ /”,则不必是一个函数。
答案 0 :(得分:2)
Awk不是外壳程序的一部分,它是一种独立的编程语言,因此您不能以这种方式调用外壳程序函数。而是在awk内完成整个操作:
$ awk -F ',' '
NR>1 {
gsub(/\//,"_",$NF) # replace /s with _s
fname="a_map/" $NF ".csv"
print >> fname
close(fname)
}' file