【发布时间】:2021-12-20 14:53:46
【问题描述】:
我有三个文件:
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:
(food, apple,)(bag, tortoise,)
(sky, cat,)(sun, sea,)
(car, shape)(milk, market,)
(man, shirt)(hair, life)
(dog, big)(bal, pink)
对于0.txt,我想用1 nth 1.txt 行替换从home_cool 发生的每一个2 nth,但只使用最多第二个1.txt 的行(然后是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 完成该过程时,我想用 1 nth 1.txt 行替换从 home_cool 到 0-1.txt 发生的所有 2 nth使用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 替换为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 片段?
注意:问题的标题可能应该是“多个输入,相同的过程,不同的输出”
【问题讨论】:
-
相关,我假设:stackoverflow.com/q/69867423/4162356 是 2 nth 和 1 nth 2nd 和 1st 吗?
-
@JamesBrown 是的,相关,但我相信这个新问题还不够。
-
@Cyrus 我认为这可能不公平。他们真的删除了带有答案的问题吗?我只看到他们删除了一个问题——这个问题的以前版本,因为很难清楚地表达这个问题。更不用说(显然)将英语作为第二语言的人了。这个版本更清楚地描述了这个问题。 OP 应该编辑他们之前的问题,而不是删除和重新发布,并且可能先由同事或朋友审查。
-
@dan 我同意 Cyrus 的观点,发生的情况是我已经删除了旧问题,最正确的是保留这个新问题,如果需要我需要完全编辑它。
-
@dan:有人删除了我的评论。 example 有答案的问题。