使用awk读取简洁的CSV完整文件



我有一个有n个不同列的csv文件,下面附上一个例子。如何使用awk输出整个csv文件(由使用STDIN的dbms使用)。我试着

awk -v RS='rn' '{print $1 ',' $1 + 1} file

,但这导致第一列也在最后打印。还有一种方法可以在读取csv时更改文件结尾,使其以'rn'的形式输出。最好找一个一行字。

1, 20, Is
2, 12, this
3, 18, minimal
4, 21, enough

,输出应为

1, 20, Is
2, 12, this
3, 18, minimal
4, 21, enough

在使用awk(不使用cat)的相同位置以换行符和逗号在终端打印。

我想你这么做是有原因的....

使用GNU awk健壮地支持多字符RS:

awk -v BINMODE=3 'BEGIN{RS=ORS="rn"} 1' file

BINMODE(参见https://www.gnu.org/software/gawk/manual/gawk.html#Built_002din-Variables)是必需的,因为在某些平台上,底层的C原语在gawk看到它们之前就消耗了行结束的rs。

idk你如何处理与POSIX awk的binmode需要的情况,但如果awk看到的rs和假设你没有任何ns在你的记录中间(例如,当你导出一个电子表格,包括从MS-Excel跨越多行单元格),然后在任何awk:

awk '1' file

如果您有包含换行符的字段,有关DOS行结束符和使用awk解析csv的更多信息,请参阅:

  • why-does-my-tool-output-overwrite-itself-and-how-do-i-fix-it
  • whats-the-most-robust-way-to-efficiently-parse-csv-using-awk

相关内容

  • 没有找到相关文章

最新更新