在 awk 命令中生成 csv 文件

Generate csv file in awk command

我正在执行下面的 awk 命令来拆分文件并生成 .CSV 格式的输出。我尝试了很多方法来在脚本中传递正确的语法以生成 csv 文件,但没有成功。有人可以让我知道在哪里提到正确的语法吗?

awk -v lines="30000" -v pre="awk_part_" '
        NR==1 { header=[=10=]; next}
        (NR-1) % lines ==1 { fname=pre c++; print header > fname}
        {print > fname}' patient.tsv

上述命令的工作原理:

  1. awk -v lines=”30000″ -v pre=”awk_part_” – 首先,我声明了两个 awk 变量来定义每个拆分文件中有多少条记录以及文件名的前缀
  2. NR==1 { header=$0; next} – 当 awk 读取第一行时,它将该行存储在 header 变量中并停止进一步处理
  3. (NR-1) % lines ==1 { fname=pre c++; print header > fname} – 当当前行是主干的第一条记录时,我们需要通过递增计数器 (c) 来更新文件名 (fname)。此外,由于这将是一个新文件,我们将 header 变量的值添加到文件中作为第一行
  4. {print > fname}' patient.tsv – 然后,我将每个记录行重定向到当前的 fname 文件

awk -v lines=”30000″ -v pre=”awk_part_” – First, I’ve declared two awk variables to define how many records are in each split file and the prefix of the filenames

根据Options in GNU AWK manual

-v var=val

(...) Set the variable var to the value val before execution of the program begins. Such variable values are available inside the BEGIN rule(...).

您显然试图在 BEGIN 之外使用它,请尝试使用以下代码

awk 'BEGIN{lines=30000;pre="awk_part_"}
     NR==1 { header=[=11=]; next}
     (NR-1) % lines ==1 { fname=pre c++; print header > fname}
     {print > fname}' patient.tsv

并检查它是否产生了您想要的结果。

@Daweo,行与 headers 一起进入文件。以 FILE 类型格式创建文件扩展名。参考截图awk_part_o in FILE format