在固定宽度文件中删除数据字段中的新行字符

在固定宽度文件中删除数据字段中的新行字符

固定宽度文件有 15 个字段。第5个字段包含地址;它从第 19 个字符开始,到第 58 个字符结束(长度为 40)。有时地址包含一个\n字符(数据中的换行符)。

如何在不影响实际行分隔符的情况下将其替换为双倍空格。

我给出了文件的更新数据集,文件的\n某些行数据中将包含字符,只有其余的就可以了,即没有\n字符,请参见下面的示例,然后如何处理:

输入示例:

01 DAVIDS 800 ABC VISAL NAGAR, ABC
BUILDING HYD TELANGANA 6000 DEVELOPER HR DEPT FULL TIME EMPLOYEE
03 ABCDEF 600 PQR NNNNN NAGAR, YYY  BUILDING NZB TELANGANA 5000 DEVELOPER SA DEPT PART TIME EMPLOYEE
02 KAMAL  900 XYZ KAMAN NAGAR, DEF
BUILDING SEC TELANGANA 8000 DEVELOPER MR DEPT FULL TIME EMPLOYEE
04 CCCCCC 200 KKK HHHHH NAGAR, JJJ  BUILDING KBR TELANGANA 1000 DEVELOPER AD DEPT FULL TIME EMPLOYEE

期望的输出:

01 DAVIDS 800 ABC VISAL NAGAR, ABC  BUILDING HYD TELANGANA 6000 DEVELOPER HR DEPT FULL TIME EMPLOYEE
03 ABCDEF 600 PQR NNNNN NAGAR, YYY  BUILDING NZB TELANGANA 5000 DEVELOPER SA DEPT PART TIME EMPLOYEE
02 KAMAL  900 XYZ KAMAN NAGAR, DEF  BUILDING SEC TELANGANA 8000 DEVELOPER MR DEPT FULL TIME EMPLOYEE
04 CCCCCC 200 KKK HHHHH NAGAR, JJJ  BUILDING KBR TELANGANA 1000 DEVELOPER AD DEPT FULL TIME EMPLOYEE

答案1

$ sed 'N; s/\n/  /' file
01 DAVIDS 800 ABC VISAL NAGAR, ABC  BUILDING HYD TELANGANA 6000 DEVELOPER HR DEPT FULL TIME EMPLOYEE
02 KAMAL  900 XYZ KAMAN NAGAR, DEF  BUILDING SEC TELANGANA 8000 DEVELOPER MR DEPT FULL TIME EMPLOYEE

这用于sed进行必要的修改。

对于原始文件中的每一行,它读取下一行并将其附加到当前行,并以换行符作为分隔符。这是通过N中的命令完成的sed。然后使用该s///命令将分隔换行符替换为两个空格字符。

将输出重定向到新文件名以保存它,例如

sed 'N; s/\n/  /' file >newfile

相关内容