我有一个有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看到它们之前就消耗了行结束的r
s。
idk你如何处理与POSIX awk的binmode需要的情况,但如果awk看到的r
s和假设你没有任何n
s在你的记录中间(例如,当你导出一个电子表格,包括从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