【发布时间】:2020-04-14 01:22:04
【问题描述】:
我有一个相当复杂的子任务:
基于一个文件创建文件夹/目录 (PF.csv) 并基于另一个文件创建文件 (FC.py) 在这些目录中。
要使用的两个输入文件
文件内容 PF.csv
#######Some description#######
,Rbig,Rsmall,Rmiddle,Lupper,Llower,
DP 0,4.590,0.424,3.5,20,20,,,,,
DP 1,2.949,0.192,1.831,8.508,17.3,,,,,
DP 2,3.103,0.812,1.662,11.456,7.666,,,,,
DP 3,2.418,0.058,1.876,6.295,9.032,,,,,
文件内容 FC.py
###############Some description#############
Lorem ipsum
App.ActiveDocument.Spreadsheet.set('B2', '=5.0mm')#set Rbig here
Lorem ipsum
App.ActiveDocument.Spreadsheet.set('F2', '=9.0mm')#set Llower here
预期输出: 对于 PF.csv 的每一行,将在其中创建一个目录和文件,使用第一列 DPx (x = 0,1,2,...) 命名。此外,文件的内容来自 FC.py,并使用 PF.csv 的其他列(如下所述,如何)中的值更改某些行。
文件内容 DP0/DP0.py
###############Some description#############
Lorem ipsum
App.ActiveDocument.Spreadsheet.set('B2', '=4.590mm')#set Rbig here
Lorem ipsum
App.ActiveDocument.Spreadsheet.set('F2', '=20mm')#set Llower here
文件内容 DP1/DP1.py
###############Some description#############
Lorem ipsum
App.ActiveDocument.Spreadsheet.set('B2', '=2.949mm')#set Rbig here
Lorem ipsum
App.ActiveDocument.Spreadsheet.set('F2', '=17.3mm')#set Llower here
文件内容 DP2/DP2.py
###############Some description#############
Lorem ipsum
App.ActiveDocument.Spreadsheet.set('B2', '=3.103mm')#set Rbig here
Lorem ipsum
App.ActiveDocument.Spreadsheet.set('F2', '=7.666mm')#set Llower here
文件内容 DP3/DP3.py
###############Some description#############
Lorem ipsum
App.ActiveDocument.Spreadsheet.set('B2', '=2.412mm')#set Rbig here
Lorem ipsum
App.ActiveDocument.Spreadsheet.set('F2', '=9.032mm')#set Llower here
我的代码
awk 'BEGIN {FS = ",";}
{
if ($1 ~ "DP")
{Rbig = $2; Llower = $6; #values are assigned from each line read from PF.csv
gsub(" ",""); system("mkdir "$1); filename=$1"/"$1".txt"; #empty space is pruned from first column ('DP x', x=0,1,2,...) and folder with file is created with the name using system() and filename
{(getline < "FC.py"); #FC.py is read, processing further FC.py only, taking the folders and values assigned using the previous codes for file PF.csv only.
{
if ($0 ~ "#set Rbig here") #if it finds a line with this, it assigns the value of Rbig, taken from PF.csv just before.
{gsub("5.0mm",Rbig"mm"); print >> filename;}
else if ($0 ~ "#set Llower here") #simlarly assigns Llower like previous two line codes
{gsub("9.0mm",Ll"mm"); print >> filename;}
else
{print >> filename;}
}; close(filename)
}
}
}
' PF.csv
我的代码输出(不需要)
文件夹已创建,但仅创建文件 DP2/DP2.py 与行 App.ActiveDocument.Spreadsheet.set('B2', '=3.103mm')#set Rbig here。
我确信这是可能的,但由于缺乏理解而没有成功。请在您的答案中解释问题出在哪里以及您是如何使用AWK 解决问题的。
PS:我只能接受仅使用 AWK 的答案,因为它是更大的一部分 工作流程,但如果可能,请随意添加其他解决方案 外壳脚本。此外,该脚本应使用 shell 脚本调用或直接在 Linux/Mac 的终端中键入。
【问题讨论】:
-
能否请您提一下这里比较文件的逻辑?
-
当然,为了清楚起见,我会编辑问题。
标签: bash shell awk scripting text-processing