awk - 有没有办法匹配文件中的字符串并在字符串匹配后的下一行打印/附加另一个文件(单行)的内容
问题描述
我正在尝试匹配文件中的字符串并在字符串匹配后打印/附加另一个文件的内容
我有包含单行的文件“addthis” pleaseaddme
:
pleaseaddme
我有第二个文件“tothis”,其中包含两行 [one] 和 [two],如下所示:
[one]
[two]
我已经尝试过组合导致以下接近我想要的结果:
awk '/\[one\]/ { printf $0; getline < "addthis" }1' tothis
结果:
[one]please add me
[two]
我希望在 [one] 之后将“请添加我”添加到新行,如下所示:
[one]
please add me
[two]
此外,这只是打印到屏幕上,而不是打印到文件“tothis”中
已经尝试了许多变化,这与我得到的一样接近
解决方案
awk '/\[one\]/ {getline var< "addthis"; $0 = $0 ORS var }1' tothis
#=> [one]
#=> pleaseaddme
#=> [two]
你应该逃跑的第一件事[
和]
。
然后将文件读取到变量中,并将其“附加”到当前行。
另一种方法可能是:
awk '/\[one\]/ {print; getline var< "addthis"; print var; next }1' tothis
根据您自己的尝试,实际上更改printf
为print
将起作用:
awk '/\[one\]/ { print $0; getline < "addthis" }1' tothis
#=> [one]
#=> pleaseaddme
#=> [two]
因为printf
不会打印ORS
,但print
会。
但是在这个帐户上,是多余的,因为默认情况下$0
会打印不带参数的打印。$0
至于就地更改,您仍然可以重定向到临时文件并稍后替换文件。
推荐阅读
- android - INI 文件在退出后不会保留值 - RAD Studio 10.4.2
- php - 如何在每个给定期间在收益表中插入数据
- javascript - 用 Javascript 中的零偏移量在 UTC 时间中转换具有一定偏移量的时间
- r - R警告:“数据长度不是行数的子倍数或倍数”
- flutter - Flutter:定位文本字段labelText
- python - 如何替换熊猫中的列名但基于字典?
- typescript - 反应原生打字稿如何输入 FlatList
- python - 调用模块时如何将 XML 片段作为参数传递?
- javascript - 将字段输入与 Firebase 条目进行比较
- python - 如何使用 Flask 将上传的文件和用户文本输入保存在 json 中