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

时间:2019-01-29 10:55:05

标签: 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

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的列表:

  • good_name.csv
  • another_good_name.csv
  • bad_name.csv

实际分辨率:

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

如果我也可以跳过fab的awk中的“ /”,则不必是一个函数。

1 个答案:

答案 0 :(得分:2)

Awk不是外壳程序的一部分,它是一种独立的编程语言,因此您不能以这种方式调用外壳程序函数。而是在awk内完成整个操作:

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