【发布时间】:2020-04-19 04:55:46
【问题描述】:
我有两个输入文件:
文件1.txt:
Name Latin-small Roman Latin-caps #header, not to be processed
F0, a, I, A
F1, b, II, B
F2, c, III, C
F3, d, IV, D
文件2.txt:
Lorem ipsum
Roman here.
LCaps here.
LSmall here.
Lorem ipsum
- 我从
File1.txt的每一行(script.sh的第 6 行)中获得了R、LC和LS的赋值。 - 使用
File1.txt(script.sh的第 7 行)生成名为Fx的文件夹,其中 x=0, 1, 2, 3,...。 - 使用
File2.txt生成的名为Fx.txt的单个文件必须放在这些文件夹中(script.sh的第 7 行)。 - 现在,在读取
File1.txt的单行之后,它应该读取(script.sh的第 7 行)并修改整个File2.txt查看键。 这是我无法让它工作的地方,它为File1.txt的每一行读取一行File2.txt。 - 这些文件的内容基本上是
File.txt的副本,除了here的值,使用键Roman(File1.txt的$3)、LCaps(File1.txt的$4)和@修改987654349@(File1.txt中的 2 美元)用于每个目录中的每个Fx.txt,使用在第一步中从File1.txt分配的值(script.sh的第 9-17 行)。
如何使用awk在各个文件夹中获取以下输出(例如文件夹F2中的输出文件):
猫F0/F0.txt
Lorem ipsum
Roman I.
LCaps A.
LSmall a.
Lorem ipsum
或者,
猫F3/F3.txt
Lorem ipsum
Roman IV.
LCaps D.
LSmall d.
Lorem ipsum
或者,
猫F2/F2.txt
Lorem ipsum
Roman III.
LCaps C.
LSmall c.
Lorem ipsum
更多信息:File1 约为 300 行,对于每一行(标题除外),将在每个文件夹中创建一个文件。 File2 约为 200 行。每个短语Roman 或LSmall 或LC 随机出现在File2.txt 的某些行中,但不超过一行。这些是修改 `
提前致谢!这个问题是更大工作流程的一部分。
EDIT2:试用码
脚本.sh
awk 'BEGIN {FS=","}
{
if ($1 !~ "F")
{}
else if ($1 ~ "F")
{LS = $2; R = $3; LC = $4;
system("mkdir "$1); filename=$1"/"$1".txt";
{(getline < "File2.txt");
{
if ($0 ~ "Roman")
{gsub("here",R); print >> filename;}
else if ($0 ~ "LSmall")
{gsub("here",LS); print >> filename;}
else if ($0 ~ "LCaps")
{gsub("here",LC); print >> filename;}
else
{print >> filename;}
}
}
}
}
' File1.txt
我正在获取所需的文件夹和文件结构(文件夹 Fx 中的文件 Fx.txt,其中 x = 0、1、2、...),但这些文件的内容是:
猫F0/F0.txt
Lorem ipsum
猫F1/F1.txt
Roman II.
猫F2/F2.txt
LCaps C.
猫F3/F3.txt
LSmall d.
关键是让awk读取整个file2.txt,同时读取file1的每一行并进行修改并将新文件放入相应的文件夹中。
【问题讨论】:
-
目标有点类似于 [stackoverflow.com/questions/57234705/…(通过比较文件 2 的所有行与文件 1 的每一行来读取两个文件),但这里需要由 AWK 完成。
-
我不明白输出是如何生成的,应该放在哪里。为什么
file2?为什么文件夹F2不是F0?为什么是Greek III,为什么是III而不是I? -
@stackoverflow.com/users/1765658/f-hauri,添加了我的代码得到的输出。更正了文字中的错误。
-
@stackoverflow.com/users/9072753/kamilcuk,我添加了更多细节,希望它能澄清。这也有点复杂,从我这边正确传达。请随时询问更多信息。
-
只需 @user ping 用户,无需复制配置文件 URL,事实上这可能会阻止 ping 工作。但无论如何,现在可能不需要 ping 这些用户。