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

[文本处理] 【已解决】求bat脚本在1.txt的倒数第4行前面插入2.txt里面的内容。谢谢

本帖最后由 yyz219 于 2024-1-28 12:43 编辑

完美解决了:

方法一(倒数插入)
@echo off
for /f %%n in ('sed -n "$=" 1.txt') do set/a "n=%%n-4"
sed "%n% r 2.txt" 1.txt>1.new.txt
【注意:2.txt————最后要有一行空行】

自动判断有没有空行:

::【在 “1.txt” 的倒数第4行 插入 “2.txt” 里面的内容】【自动判断2.txt 是否存在末尾空行】
@echo off
for /f %%n in ('sed -n "$=" 1.txt') do (set/a "n=%%n-4, m=n+1")
(findstr /v $ 2.txt>nul && (sed -e "%m% s/^/\n/" -e "%n% r 2.txt" 1.txt)||sed "%n% r 2.txt" 1.txt)>3.txt
exit

方法二(倒数插入)
1.bat
1.txt
2.txt
全部保存为UTF-8编码
@echo off
chcp 65001 >nul
gawk -vN=4 "NR>FNR;NR==FNR{if(NR>N){print a[NR%%N]}{a[NR%%N]=$0;NN=NR}}END{for(i=NN-N;++i<=NN;)if(i%%N in a)print a[i%%N]}" 1.txt 2.txt>3.txt


=======================================
三、第4行(不是倒数)插入:
sed "4r2.txt" 1.txt>3.txt

【注意:2.txt————最后要有一行空行】

自动判断有没有空行
::【在 “1.txt” 的第4行 插入 “2.txt” 里面的内容】【自动判断2.txt 是否存在末尾空行】
@echo off
(findstr /v $ 2.txt>nul && (sed -e "5 s/^/\n/" -e "4 r 2.txt" 1.txt)||sed "4 r 2.txt" 1.txt)>4.txt
exit

===========================================
原来的问题:
求bat:在1.txt的倒数第4行前面插入2.txt里面的内容。谢谢
(2.txt里面的内容————有:<   \   />   "" 也有中文 等)【第三方也行】
============================================================
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
我是小白,希望老师多多帮助

回复 37# WHY


    乐于助人
我是小白,希望老师多多帮助

TOP

其实用 PowerShell 也还不错,没那么多弯弯绕。保存为 Test.bat运行
  1. @echo off
  2. set n=4
  3. PowerShell "[Collections.ArrayList]$a=gc 1.txt -enc UTF8; $b=gc 2.txt -enc UTF8; $a.Insert($a.Count-%n%, $b); sc 3.txt $a -enc UTF8"
  4. pause
复制代码
1

评分人数

TOP

回复 35# WHY


    乐于助人
我是小白,希望老师多多帮助

TOP

  1. gawk "NR==FNR{a[NR]=$0}NR>FNR{b[FNR]=$0}END{n=length(a)-4;for(i in a){print a[i];if(i==n)for(j in b)print b[j]}}" 1.txt 2.txt>3.txt
复制代码
1

评分人数

TOP

本帖最后由 WHY 于 2024-1-30 17:56 编辑
  1. @echo off
  2. chcp 65001 > nul
  3. for /f "delims=" %%i in (1.txt) do set /a n+=1
  4. (for /f "delims=" %%i in (1.txt) do (
  5.     set /a n-=1
  6.     echo;%%i
  7.     setlocal enabledelayedexpansion
  8.     if !n!==4 (
  9.         endlocal
  10.         for /f "delims=" %%j in (2.txt) do echo;%%j
  11.     ) else endlocal
  12. )) > 3.txt
  13. pause
复制代码

TOP

sed实现在1.txt倒数第四行前插入2.txt,无论2.txt末尾是否存在空行。
  1. sed -n -e ":a;$r 2.txt" -e "$q;N;5,${P;D};ba" 1.txt|sed "${/^$/!s/$/\n/}">1_new.txt
  2. sed ":a;$q;N;5,$D;ba" 1.txt>>1_new.txt
复制代码

TOP

回复 31# qixiaobin0715


     乐于助人
我是小白,希望老师多多帮助

TOP

本帖最后由 qixiaobin0715 于 2024-1-29 10:17 编辑

这样可以不必理会2.txt末尾是否存在空行:
  1. @echo off
  2. chcp 65001>nul
  3. set x=4
  4. set /a m=x-1
  5. setlocal enabledelayedexpansion
  6. (for /f "delims=" %%i in (1.txt) do (
  7.     if defined Line4 echo,!Line4!
  8.     for /l %%j in (%m%,-1,1) do (
  9.         set /a n=%%j+1
  10.         set Line!n!=!Line%%j!
  11.     )
  12.     set line1=%%i
  13. )
  14. if defined Line4 (
  15.     for /f "delims=" %%i in (2.txt) do echo,%%i
  16.     for /l %%i in (%x%,-1,1) do echo,!Line%%i!
  17. ))>3.txt
  18. pause
复制代码
1

评分人数

TOP

很好的代码
我是小白,希望老师多多帮助

TOP

本帖最后由 aloha20200628 于 2024-1-28 11:27 编辑

回复 28# yyz219

goto方案适于大量复杂的作业调度,用于本例显得沉重了,不如以下代码简明利索...仅供参考。
  1. @echo off
  2. for /f %%n in ('sed -n "$=" 1.txt') do (set/a "n=%%n-4, m=n+1")
  3. (findstr /v $ 2.txt>nul && (sed -e "%m% s/^/\n/" -e "%n% r 2.txt" 1.txt)||sed "%n% r 2.txt" 1.txt)>1.new.txt
复制代码
1

评分人数

TOP

本帖最后由 yyz219 于 2024-1-28 09:08 编辑

回复 26# aloha20200628


    再弄一个:倒数)插入的

出来了:
::【在 “1.txt” 的倒数第4行 插入 “2.txt” 里面的内容】【自动判断2.txt 是否存在末尾空行】
@echo off
(findstr /v $ 2.txt>nul && (goto :wu)||goto :you)
:wu
for /f %%n in ('sed -n "$=" 1.txt') do set/a "n=%%n-4"
echo,>>2.txt & sed "%n% r 2.txt" 1.txt>3.txt
exit

:you
for /f %%n in ('sed.exe -n "$=" 1.txt') do set/a "n=%%n-4"
sed.exe "%n% r 2.txt" 1.txt>3.txt
exit
我是小白,希望老师多多帮助

TOP

回复 26# aloha20200628


    这个方便
我是小白,希望老师多多帮助

TOP


可请 findstr 露一手,先检测 2.txt 是否存在末尾空行,再选择sed方案而行。
假设要在第4行(不是倒数)插入...
  1. (findstr /v $ 2.txt>nul && (sed -e "5 s/^/\n/" -e "4 r 2.txt" 1.txt)||sed "4 r 2.txt" 1.txt)>1.new.txt
复制代码
1

评分人数

TOP

回复 24# hfxiang


    谢谢
我是小白,希望老师多多帮助

TOP

返回列表