csv - 将 block 中的行转换为制表符分隔

标签 csv awk sed newline

我在 2 个 block 中有以下几行(实际上有 ~10K)。 在此示例中,每个 block 包含 3 行。 block 由空行分隔。所以 block 就像“段落”。

xox
91-233
chicago

koko
121-111
alabama

我想把它变成制表符分隔的行,像这样:

xox  91-233  chicago
koko 121-111 alabama

我该怎么做?

我尝试了 tr "\n""\t",但它没有按照我的要求进行。

最佳答案

$ awk -F'\n' '{$1=$1} 1' RS='\n\n' OFS='\t' file
xox     91-233  chicago
koko    121-111 alabama 

工作原理

Awk 将输入分成记录,并将每条记录分成字段。

  • -F'\n'

    这告诉 awk 使用换行符作为字段分隔符。

  • $1=$1

    这告诉 awk 将第一个字段分配给第一个字段。虽然这似乎什么都不做,但它会导致 awk 将记录视为已更改。因此,使用我们为 ORS(输出记录分隔符)分配的值打印输出。

  • 1

    这是 awk 用于打印该行的神秘速记。

  • RS='\n\n'

    这告诉 awk 将两个连续的换行符视为记录分隔符。

  • OFS='\t'

    这告诉 awk 使用制表符作为输出的字段分隔符。

关于csv - 将 block 中的行转换为制表符分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38088799/

相关文章:

bash - 如何将变量传递给awk命令行

scripting - awk 不打印换行符

awk - 将一个文件中模式的每个连续实例替换为另一个文件中的每个连续项目

linux - 使用 tr/sed 等在 Linux 上删除字符序列\r\n

linux - 字典中的单词列表生成器

python - 在 Windows 上编写 CSV

java - 将 CSV 导入 Java 中的 SQLite

python - 如何从 csv 文件输入进行单热编码

python - 将 csv 中的值替换为文本并将其写入文件和中心段落

bash - 使用 awk 从一行中提取值