例如,如果有 n 行,则应创建 n-1 个文件。 这是我迄今为止取得的成就。我手动插入 8 行(即总行数(。我不知道如何在变量中获取总行数然后使用它。
awk '{if (NR<8) F=NR".ndjson"; print >> F; close (F)}' export.ndjson
恕我直言,其中一种方法可以通过wc
命令获取行数,然后将其存储到变量中。公平的警告,因为 OP 现在已经显示了样本,因此无法对其进行测试并在此处编辑/调整了 OP 的尝试。
awk -v lines="$(wc -l < "export.ndjson")" '{if (NR<lines) F=NR".ndjson"; print >> F; close (F)}' export.ndjson
注意:另一种方法是读取您的Input_fileexport.ndjson
2 次,其中第 1 次获取其总行数(仅行数(,第二次执行时,我们可以使用该计数在条件下使用。
第二个解决方案:如果我的假设是正确的,并且您只想保留最后一行,那么您可以尝试tac
+awk
可以留下第一行的组合。
tac export.ndjson | awk 'FNR>1{F=NR".ndjson"; print >> F; close (F)}'
如果您希望输出文件编号从 2 开始:
awk 'NR>1{out=NR".json"; print prev > out; close(out)} {prev=$0}' export.ndjson
或在 1:
awk 'NR>1{out=(NR-1)".json"; print prev > out; close(out)} {prev=$0}' export.ndjson
或:
awk 'NR>1{print prev > out; close(out)} {prev=$0; out=NR".json"}' export.ndjson
将每一行打印到自己的文件中,最后一行除外。
$ awk 'p{close(f); f="object"(NR-1)".ndjson"; print p > f} {p=$0}' file
另请注意,空行不会创建空文件。
逻辑只是将打印延迟一条记录。