使用另一个文件中的行范围替换单独文件中字符串中出现的每 2 个 n

2023-12-22

我有三个文件:

0.txt e 0-1.txt具有以下相同内容:

"#sun\t",
"car_snif = house.group_tree(home_cool)\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree(home_cool)\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree(home_cool)\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree(home_cool)\t",
"machine(shoes_shirt.shop)\t",
"#sun\t",
"car_snif = house.group_tree(home_cool)\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree(home_cool)\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree(home_cool)\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree(home_cool)\t",

和源文件1.txt below:

(food, apple,)(bag, tortoise,)
(sky, cat,)(sun, sea,)
(car, shape)(milk, market,)
(man, shirt)(hair, life)
(dog, big)(bal, pink)

For 0.txt我想更换每一个2 nth发生于home_cool by 1 nth 1.txt行,但只使用最多第二行1.txt (then sed -n '1,2p'),这样我的2.txt输出如下:

"#sun\t",
"car_snif = house.group_tree((food, apple,)(bag, tortoise,))\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree((food, apple,)(bag, tortoise,))\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree((sky, cat,)(sun, sea,))\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree((sky, cat,)(sun, sea,))\t",
"machine(shoes_shirt.shop)\t",
"#sun\t",
"car_snif = house.group_tree((food, apple,)(bag, tortoise,))\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree((food, apple,)(bag, tortoise,))\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree((sky, cat,)(sun, sea,))\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree((sky, cat,)(sun, sea,))\t",

当完成该过程时2.txt,我想全部替换掉2 nth发生于home_cool at 0-1.txt by 1 nth 1.txt使用第三行的行1.txt从此(然后sed -n '3,5p'),这样我的3.txt输出如下:

"#sun\t",
"car_snif = house.group_tree((car, shape)(milk, market,))\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree((car, shape)(milk, market,))\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree((man, shirt)(hair, life))\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree((man, shirt)(hair, life))\t",
"machine(shoes_shirt.shop)\t",
"#sun\t",
"car_snif = house.group_tree((dog, big)(bal, pink))\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree((dog, big)(bal, pink))\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree((car, shape)(milk, market,))\t",
"machine(shoes_shirt.shop)\t",
"car_snif = house.group_tree((car, shape)(milk, market,))\t",

通过下面的行,我可以分为两个步骤来替换home_cool at 0.txt(第一步sed -n '1,2p'和第二步sed -n '3,5p')。但我想保存第一步2.txt和第二步3.txt:

awk 'NR==FNR {a[NR]=$0; n=NR; next}/home_cool/ { gsub("home_cool", a[int((++i-1)%(n*2)/2)+1])}1' <(cat 1.txt | tee >(sed -n '1,2p') >(sed -n '3,5p')) 0.txt >> 2.txt

所以我真正想要的是类似的东西(下面的伪代码):

awk 'NR==FNR {a[NR]=$0; n=NR; next}/home_cool/ { gsub("home_cool", a[int((++i-1)%(n*2)/2)+1])}1' <(cat 1.txt | tee >(sed -n '1,2p') >(sed -n '3,5p')) | "to sed -n '1,2p' make" 0.txt >> 2.txt | "to sed -n '3,5p' make" 0-1.txt >> 3.txt

我怎样才能通过维护命令行来做到这一点而不打破几个孤立的 awk 片段?

注意:也许问题的标题应该是“多个输入,相同的过程,不同的输出”


这有效:

awk \
'FNR==1 {++f}
f==1 {a[i++]=$0}
f==2 {if ($0~/home_cool/) {gsub(/home_cool/, a[int(j++/2)%2]) }; print > "2.txt"}
f==3 {if ($0~/home_cool/) {gsub(/home_cool/, a[int(k++/2)%3 + 2]) }; print > "3.txt"}' \
    1.txt 0.txt 0-1.txt

硬编码的替代方案"2.txt" and "3.txt"包括:

  • 使用分配的变量-v outfile1=2.txt -v outfile2=2.txt
  • 将它们替换为outfile,并使用这个参数列表:1.txt outfile=2.txt 0.txt outfile=3.txt 0-1.txt
  • 将它们替换为ARGV[4] and ARGV[5],添加行f==4 {exit},并使用这个参数列表:1.txt 0.txt 0-1.txt 2.txt 3.txt

Caveats:

  • 如果给定文件为空,则不会导致f增加并相应地打破事物。呆呆地,ENDFILE可以代替使用。看这个答案:如何获取 awk 脚本正在处理的文件号? https://stackoverflow.com/questions/58015719/how-to-get-the-filenumber-that-is-being-processing-by-an-awk-script
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用另一个文件中的行范围替换单独文件中字符串中出现的每 2 个 n 的相关文章

  • awk 排序多维数组[重复]

    这个问题在这里已经有答案了 GNU awk 支持多维数组 gnu org software gawk manual gawk Arrays of Arrays q 1 1 dog q 1 2 999 q 2 1 mouse q 2 2 77
  • 你能在 MS Windows 上用 Python 将 stdin 作为文件打开吗?

    在 Linux 上 我使用 subbprocess Popen 来运行应用程序 该应用程序的命令行需要输入文件的路径 我了解到我可以将路径 dev stdin 传递到命令行 然后使用 Python 的 subproc stdin write
  • 如何使用AWK从文件中连续输出行

    我有一个多行文件 我想连续输出文件的某些行 比如第一次 从第1行打印到第5行 下次 打印第2行到第6行 依此类推 我发现 AWK 是一个非常有用的函数 我尝试自己编写代码 但它什么也没输出 以下是我的代码 bin bash for n in
  • 如何格式化 .CSV 文件的日期字段并在字符串字段中包含多个逗号

    我有一个 CSV 文件 file csv 其数据全部用双引号引起来 文件的示例格式如下 column1 column2 column3 column4 column5 column6 column7 Column8 Column9 Colu
  • awk 比较多个文件

    我有2个文件 file1 1 apple 2 mango 3 banana 44 orange file2 1 apple 22 31 xyz 2 man 3 banana 44 oran 44 orange 我需要使用第 1 列和检查第
  • 将 stdout 和 stderr 重定向到单独的文件时抑制 NativeCommandError 输出

    我有以下文件 test ps1 e test bat gt stdout txt 2 gt stderr txt test bat echo off echo write to stdout echo write to stderr gt
  • 在Python中通过sys.stdout写入unicode字符串

    暂时假设一个人无法使用print 从而享受自动编码检测的好处 所以这给我们留下了sys stdout 然而 sys stdout太蠢了不做任何合理的编码 http bugs python org issue4947 现在人们阅读 Pytho
  • 如何检查 TCL 的标准输入缓冲区是否为空?

    With fconfigure http www tcl tk man tcl8 6 TclCmd fconfigure htm您可以获取和设置频道选项 buffering指定缓冲类型 默认为line for stdin 有没有办法检查缓冲
  • Python3 http.server:将日志保存到文件中

    我使用Python3 6编写了一个简单的HTTP服务器来重定向所有请求 我写的文件可以找到here https github com kmahyyg learn py3 blob master antiscanhttp py 我可以在 Ub
  • 如何使用 bash 显示具有两个子文件夹的文件夹?

    我通过 Cygwin 使用 bash 我有一个大文件夹 a 有很多子文件夹 b 这些子文件夹各有一个或两个子文件夹 c 我想找到所有有两个子文件夹 c 的子文件夹 b 并输出它们 结构如下 a b1 c1 b2 c1 c2 b3 c1 c2
  • 我可以让 ungetc 取消阻止阻塞的 fgetc 调用吗?

    我想在收到 SIGUSR1 后使用 ungetc 将 A 字符重新填充到标准输入中 想象一下我有充分的理由这样做 调用 foo 时 stdin 中的阻塞读取不会被收到信号时的 ungetc 调用中断 虽然我没想到它会按原样工作 但我想知道是
  • 使用 Windows 批处理文件在文本文件中添加新行

    我有一个文本文件 其中有 200 多行 我只想在第 4 行之前添加一个新行 我使用的是 Windows XP 输入前的示例文本文件 header 1 header 2 header 3 details 1 details 2 输出后 hea
  • awk/Unix 分组依据

    有这个文本文件 name age joe 42 jim 20 bob 15 mike 24 mike 15 mike 54 bob 21 试图得到这个 计数 joe 1 jim 1 bob 2 mike 3 Thanks awk F NR
  • 对重复的名称添加双引号

    我想从文件中找到重复的名称 如下所示 并用 标记它们 file James Miki 123 456 7890 Wang Tai 234 563 6879 James Miki 123 456 7890 输出希望看起来像 James Mik
  • 折叠具有多个字段的行

    我有这个代码 awk seen 1 2 a 1 a 1 a 1 t 2 END for i in a print i a i inputfile 我想折叠具有两个以上字段的行 但始终基于第一个字段作为索引 输入文件 三列制表符分隔 prot
  • 如何停止使用扫描仪从标准输入读取多行?

    我正在做一个 JAVA 作业 应该处理多行输入 指令显示 输入是从标准输入读取的 给出了示例输入的示例 one 1 two 2 three 3 我不明白上面的示例输入 从标准输入读取 是什么意思 这是我编写的一个测试程序 它可以消除我的困惑
  • C# 处理标准输入

    我目前正在尝试通过命令行断开与网络文件夹的连接 并使用以下代码 System Diagnostics Process process2 new System Diagnostics Process System Diagnostics Pr
  • 将 stdout 和 stderr 重定向到带有前缀的单个文件

    我正在编写一个 bash 脚本 需要重定向stdout and stderr我运行到单个文件的命令的输出 在每行前面加上前缀stderr or stdout 因此 有没有一个简单的方法可以做到这一点 from Debian http www
  • python sys.stdout 和 C++ iostreams::cout

    我假设 sys stdout 将引用与在同一进程中运行的 iostreams cout 相同的物理流 但情况似乎并非如此 以下代码使用名为 write 的 python 包装器调用 C 函数 该函数写入 cout from cStringI
  • 如何将查找和替换限制为 CSV 中的一列?

    我有一个 4 列 CSV 文件 例如 0001 fish animal eats worms I use sed对文件进行查找和替换 但我需要将此查找和替换限制为仅在第 3 列中找到的文本 如何让查找和替换仅发生在这一列上 您确定要使用se

随机推荐

  • 我可以从注释或 Spring MVC 控制器配置 Jackson JSON 漂亮的打印吗?

    我正在使用 Jackson 1 9 6 codehaus 在 Spring MVC 应用程序中对响应主体进行 JSON 序列化 但我在寻找配置漂亮打印的方法时遇到了困难 我找到的所有代码示例 例如this https stackoverfl
  • 无需 jQuery ui 即可拖动

    如何在不使用 jQuery UI 的情况下使元素可拖动 我有这个代码
  • “忘记”一条死胡同

    我有一个 Mercurial 存储库 它是在版本 A 上 我做了一些更改 提交 到版本 B 并推动 然而 后来我意识到我不想做出这些改变 我更新回版本 A 并对版本 C 进行了一些替代更改 C B A 然而 现在我无法推送 rev C 因为
  • Firebird 在大型项目中的使用[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 firebird 有哪些能力可以在重点项目中使用它 PostgreSQL 和 FireBirdSQL 哪个更好 有人知道使用 Firebird
  • 最佳实践 MVVM 将数据从一个 Activity 传递到另一个 Activity

    当前将数据从一个活动 主 传递到另一个 详细 的最佳实践是什么 一种可能的方法是拥有一个在主视图和细节视图之间共享的单一视图模型类 单击主活动中的某个项目时 所选条目将设置为视图模型 详细活动因此可以读取所选条目 因为它使用相同的视图模型
  • ESLint - 需要 let 或 const 而不是 var (no-var)

    如何在 ESlint 上禁用不鼓励使用 var 并鼓励使用 const 或 let 的规则 In your package json 假设这就是您正在使用的 包括 eslintConfig rules no var 0 no var htt
  • D语言:初始化动态多维数组最佳实践?

    只是好奇这是否是初始化动态多维数组的最佳实践D http www d programming language org index html 他们的语言参考中有一个关于数组的部分 但我不太确定它是否超出了我想要完成的目标 class Map
  • 当用户单击图表时创建 MarkerView

    我已经搜索并搜索了当用户使用 Swift 的图表 是 iOS 图表 单击条形图中的条形时如何显示 MarkerView 文档指出该库能够使用 MarkerViews 突出显示值 使用可自定义的弹出视图 但我不知道如何显示 我希望当用户单击条
  • Watin - 如何使用弹出页面测试网站

    我正在使用 WatiN Net 中的 Web 应用程序测试 在 Dynamics CRM 4 0 网站上进行集成测试 CRM 使用大量弹出窗口 例如 单击列表中的联系人会打开一个新的浏览器窗口 其中包含该联系人的详细信息 我想测试 登录 C
  • 将多个文件加载并命名到 R 中

    我有超过 1000 个数据集 我想加载到 R 中 并在加载时单独命名每个数据集 我发现要加载它们 我可以使用以下命令 temp list files pattern csv for i in 1 length temp assign tem
  • 从 OpenCV Canny 边缘检测器获取角度

    我想使用 OpenCV 的 Canny 边缘检测器 如中概述的这个问题 https stackoverflow com questions 11987483 opencvs canny edge detection in c 例如 cv C
  • 无法将类型“System.Collections.Generic.List<>”隐式转换为“System.Threading.Tasks.Task<>>”

    我遇到了例外 无法隐式转换类型 System Collections Generic List
  • 如何将日期选择器日期更改为 NSDate 类型但秒数为零

    我有一个日期选择器 它返回一个 NSdate 值 我想要将秒数的日期值设置为 0 我有在 Objective c 中执行此操作的代码 如下所示 NSTimeInterval time floor date timeIntervalSince
  • VBA Excel - ACCESS 中的更新记录

    我遇到问题了 我想使用 EXCEL 中的 VBA 更新 Access 数据库表中的现有记录 My code sqlik UPDATE query which works in access Set ZAP QUERY2 baza Creat
  • 将文本插入现有/外部 Draftjs 文本字段

    我正在开发一个需要将文本插入到contenteditable true div a Draftjs准确地说 基于文本字段 现在我知道 Draft js 使用 React 并且应该以这种方式使用 但在这种情况下 该应用程序已经存在 并且这是与
  • Angular 2 中的多个模块

    我有一个 Angular 2 应用程序 RC7 它最初是作为单个组件 但很快就以各种不同 有时完全不相关 的方式在整个项目中使用 其结果是 单个NgModule引导所有组件似乎是一个糟糕的主意 并且有大量的膨胀 我正在努力寻找一种拥有多个模
  • Azure Cosmos DB 使用基于角色的访问控制读取数据

    我在 Azure 中有一个 CosmosDB 我想授予用户读取各种集合内的数据的权限 我尝试给他们 读者 角色 这让他们知道存在 CosmosDB 并且他们可以看到一些元数据 但他们无法访问其中的数据 我为他们分配了 Cosmos DB 帐
  • Bash:有任何命令可以替换文本文件中的字符串吗?

    我有一个包含许多文本文件的目录层次结构 我想在每次特定的文本字符串出现在其中一个文件中时搜索它 并将其替换为另一个字符串 例如 我可能想将每次出现的字符串 Coke 替换为 Pepsi 有谁知道如何做到这一点 我想知道是否有某种 Bash
  • Angular 2 路由器 - CanActivate Guard

    我正在实现 CanActivate 防护 以便在用户会话无效时将用户重定向到登录页面 关于会话是否有效的检查是通过服务完成的 因此我从警卫那里订阅服务调用以获取会话有效性状态 我已经调试了代码 一切似乎都正常工作 事实上 当会话无效时 应用
  • 使用另一个文件中的行范围替换单独文件中字符串中出现的每 2 个 n

    我有三个文件 0 txt e 0 1 txt具有以下相同内容 sun t car snif house group tree home cool t machine shoes shirt shop t car snif house gro