[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】如何使用gawk处理文本四元组的分割与合并

本帖最后由 思想之翼 于 2025-3-9 15:44 编辑

A.txt记录多行数值,格式为:
1234567
8888888
1122339
......

若将A.txt记录的数值,进行四元组分割,可以得到按照位置顺序命名的35个文本:1234.txt 1235.txt 1236.txt 1237.txt 1245.txt 1246.txt 1247.txt 1256.txt 1257.txt 1267.txt 1345.txt 1346.txt 1347.txt 1356.txt 1357.txt 1367.txt 1456.txt 1457.txt 1467.txt 1567.txt 2345.txt 2346.txt 2347.txt 2356.txt 2357.txt 2367.txt 2456.txt 2457.txt 2467.txt 2567.txt 3456.txt 3457.txt 3467.txt 3567.txt 4567.txt

这35个文本,记录对应位置的数据:
1234.txt:
1234
8888
1122

1235.txt:
1235
8888
1123

1236.txt:
1236
8888
1123

1237.txt:
1237
8888
1129
......

4567.txt:
4567
8888
2339

【问题1】如何使用第三方工具gawk,按照位置顺序四元组合,将A.txt分割成35个文本?
【问题2】如何使用第三方工具gawk,将上述35个文本,按照对应的位置顺序,拼接成A.txt?(35个文本行数不同且有重复

贴一个问题1的解决方案(非gawk)
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem 定义所有四元组组合
  4. set combinations=1234 1235 1236 1237 1245 1246 1247 1256 1257 1267 1345 1346 1347 1356 1357 1367 1456 1457 1467 1567 2345 2346 2347 2356 2357 2367 2456 2457 2467 2567 3456 3457 3467 3567 4567
  5. rem 清空现有输出文件
  6. for %%C in (%combinations%) do if exist %%C.txt del %%C.txt
  7. rem 逐行处理A.txt
  8. for /f "usebackq delims=" %%L in ("A.txt") do (
  9.     set "line=%%L"
  10.     for %%C in (%combinations%) do (
  11.         set "pos=%%C"
  12.         rem 提取四个位置索引
  13.         set /a i1=!pos:~0,1!-1
  14.         set /a i2=!pos:~1,1!-1
  15.         set /a i3=!pos:~2,1!-1
  16.         set /a i4=!pos:~3,1!-1
  17.         rem 截取字符并拼接
  18.         for %%a in (!i1!) do set "c1=!line:~%%a,1!"
  19.         for %%a in (!i2!) do set "c2=!line:~%%a,1!"
  20.         for %%a in (!i3!) do set "c3=!line:~%%a,1!"
  21.         for %%a in (!i4!) do set "c4=!line:~%%a,1!"
  22.         echo !c1!!c2!!c3!!c4!>>%%C.txt
  23.     )
  24. )
  25. endlocal
复制代码

TOP

返回列表