导出文件的每一行(最后一行除外),以使用 AWK 为每一行创建一个新文件



例如,如果有 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.ndjson2 次,其中第 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

另请注意,空行不会创建空文件。

逻辑只是将打印延迟一条记录。

相关内容

  • 没有找到相关文章

最新更新