首页 > 解决方案 > 如何在 Linux shell 中根据第一个字符拆分文件

问题描述

我确实有一个带有标题和详细数据的固定宽度平面文件。它们都可以通过第一个字符来识别:1 表示标题,2 表示详细信息。

我想从我的固定宽度文件中生成 2 个不同的文件,每个文件都有自己的记录集,但没有写入类型记录。

文件 Header.txt 只有类型 1 记录。文件 Detail.txt 只有类型 2 记录。

请让我知道我们如何实现这一目标。

示例平面文件:

120190301,025712,FRANK,DURAND,USA
20257120023.12
20257120000.21
20257120191.45
120190301,025737,ERICK,SMITH,USA
20257370000.29
20257370326.41
120190301,025632,JOSEPH,SILVA,USA
20256320019.57
20256320029.12
20256320129.04

期望的输出:

页眉.txt

20190301,025712,FRANK,DURAND,USA
20190301,025737,ERICK,SMITH,USA
20190301,025632,JOSEPH,SILVA,USA

详情.txt

0257120023.12
0257120000.21
0257120191.45
0257370000.29
0257370326.41
0256320019.57
0256320029.12
0256320129.04

标签: linuxshellfileawksplit

解决方案


awk '{if(/^1/){ sub(/^./,""); print > "Header.txt" }else{sub(/^./,""); print>"Detail.txt"}}' flatfile

如果一行的第一个字符匹配1,则剥离第一个字符并将行写入到Header.txt,否则剥离第一个字符并将行写入到Detail.txt

输出:

cat Header.txt 
20190301,025712,FRANK,DURAND,USA
20190301,025737,ERICK,SMITH,USA
20190301,025632,JOSEPH,SILVA,USA

第二个:

cat Detail.txt 
0257120023.12
0257120000.21
0257120191.45
0257370000.29
0257370326.41
0256320019.57
0256320029.12
0256320129.04

推荐阅读