linux - Unix 文件中的换行符

标签 linux file awk sed

<分区>

我有一个文件,其中的记录由 | 分隔。有几个换行符,第一行的一部分移动到第二行。如果我计算|的数量在特定的行中,它应该始终保持一致。如何识别哪一行有换行符,并将两行合并为一行,以便“|”的数量在每一行中始终保持一致?

文件如下所示:

DeptID|EmpFName|EmpLName|Salary
Engg|Sam|Le
wis|1000
Engg|Smith|Davis|2000
HR|Denis
|Lillie|1500
HR|Danny|Borr
inson|3000
IT|David|Letterman|2000
IT|John|Newman|3000

而我想计算'|'的数量在每一行。

在这种情况下,每一行应该有 3 个 '|'每个,但由于换行,情况并非如此,

我最终想要的输出是

DeptID|EmpFName|EmpLName|Salary
Engg|Sam|Lewis|1000
Engg|Smith|Davis|2000
HR|Denis|Lillie|1500
HR|Danny|Borrinson|3000
IT|David|Letterman|2000
IT|John|Newman|3000

最佳答案

awk 中的一个:

$ cat foo.awk
BEGIN { FS=OFS="|" }  # set separators
NR==1 { nf=NF }       # expect the field count to be correct on header record
NF<nf {               # if NF less than on header record
    while (NF<nf) {   # and while NF < less than on header record
        b=$0          # buffer too short record
        getline       # read next record
        $0 = b $0     # catenate buffer and fresh record
    }
} 1                   # output

运行它:

$ awk -f foo.awk foo
DeptID|EmpFName|EmpLName|Salary
Engg|Sam|Lewis|1000
Engg|Smith|Davis|2000
HR|Denis|Lillie|1500
HR|Danny|Borrinson|3000
IT|David|Letterman|2000
IT|John|Newman|3000

如果记录增长太长则不检查。

关于linux - Unix 文件中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40280576/

相关文章:

PHP MySQL 连接错误

编译给出与 Windows 编译器不同的结果

java:使用ImageIO写入图像文件

csv - 使用 awk 有效解析 CSV 的最可靠方法是什么?

shell - 如何从字符串中提取有效数字,即使它后跟零

linux - 如何在 Perl 中将文件拆分为给定数量的部分? (在 Unix 上)

linux - Codeigniter - 未收到数据 - 与 Chrome 无关

python - args python 解析器,一个空格和 Spark

javascript - 如何读取axios中获取的链接的txt文件?

python - 我能否使 socket.makefile 具有与常规文件相同的读取语义?