【问题标题】:Remove bad characters to file name while spliting with awk使用 awk 拆分时删除文件名中的坏字符
【发布时间】:2019-06-22 11:40:49
【问题描述】:

我有一个用 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_map:

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

实际资源:

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

不需要成为一个函数,如果我可以跳过 awk 中的“/”,那也是很棒的。

【问题讨论】:

标签: awk sh


【解决方案1】:

Awk 不是 shell 的一部分,它是一种独立的编程语言,所以不能这样调用 shell 函数。相反,只需在 awk 中完成所有操作:

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

【讨论】:

  • 谢谢,我希望这很简单!奇迹般有效!也不知道是自己的语言!很高兴知道,因为这对我的工作来说太棒了。
猜你喜欢
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多