如果某一列中的文本与其前面的文本不匹配,则将一个大文件拆分为多个文件

2024-04-15

我搜索了一段时间,找不到对此的回应。我有一个标准 tsv 文件,格式如下:

1    100    101    350    A
1    101    102    300    A
1    102    103    180    A
1    800    801    60     B
1    801    802    70     B
1    802    803    82     B
1    975    976    105    C
1    976    977    108    C

等等。这会持续几百万行,并且第 5 列(A、B、C)中有 1000 个不同的区域。这些区域的行数大小各不相同。我想迭代该文件并将每个区域拆分为自己的文件。

文件A.txt

1    100    101    350    A
1    101    102    300    A
1    102    103    180    A

文件B.txt

1    800    801    60     B
1    801    802    70     B
1    802    803    82     B

文件C.txt

1    975    976    105    C
1    976    977    108    C

With awk

awk '{out = "File" $NF ".txt"; print >> out; close(out)}' file

更高效,不在每行之后关闭目标文件:

awk '
    $NF != dest {if (out) close(out); dest = $NF; out = "File" dest ".txt"} 
    {print >> out}
' file
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果某一列中的文本与其前面的文本不匹配,则将一个大文件拆分为多个文件 的相关文章

随机推荐