Удалять плохие символы в имени файла при разделении с помощью awk - PullRequest
0 голосов
/ 29 января 2019

У меня есть большой файл, который я разделил с помощью 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

Не нужно быть функцией, если я могу просто пропустить "/" в awk, который тоже потрясающий.

1 Ответ

0 голосов
/ 29 января 2019

Awk не является частью оболочки, это независимый язык программирования, поэтому вы не можете вызывать функции оболочки таким образом.Вместо этого просто сделайте все это в пределах awk:

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