bash - 使用 read line do 读取多行

标签 bash sed line aix

好吧,我对此绝对是菜鸟(几周前才开始尝试为我的工作编写代码)所以请对我宽容一点 aix 系统上的 IM 我有 file1、file2 和 file3,它们都包含 1 列数据(文本或数字)。

file1
VBDSBQ_KFGP_SAPECC_PRGX_ACCNT_WKLY
VBDSBQ_KFGP_SAPECC_PRGX_ADDRM_WKLY
VBDSBQ_KFGP_SAPECC_PRGX_COND_WKLY
VBDSBQ_KFGP_SAPECC_PRGX_CUSTM_WKLY
VBDSBQ_KFGP_SAPECC_PRGX_EPOS_DLY
VBDSBQ_KFGP_SAPECC_PRGX_INVV_WKLY

file2
MCMILS03
HGAHJK05
KARNEK93
MORROT32
LAWFOK12
LEMORK82


file3
8970597895
0923875
89760684
37960473
526238495
146407

每个文件中的行数完全相同。 我有另一个名为“dummy_file”的文件,我想将其取出、替换部件并弹出到一个新文件中。

WORKSTATION#JOB_NAME
SCRIPTNAME "^TWSSCRIPTS^SCRIPT"
STREAMLOGON "^TWSUSER^"
-job JOB_NAME -user USER_ID -i JOB_ID
RECOVERY STOP

此文件中只有 3 个我关心的字符串需要替换,并且对于我将来使用的虚拟文件,它们将始终相同

JOB_NAME
JOB_ID
USER_ID

JOB_NAME 有 2 个条目,其他条目只有 1 个。我想要的是获取原始文件,将两个 JOB_NAME 条目替换为 file1 中的第 1 行,然后将 USER_ID 替换为文件 2 中的第 1 行,然后将 JOB_ID 替换为 file3 中的第 1 行,然后将其放入新文件中 我想对文件 1、2 和 3 中的所有行重复该过程,因此下一个文件的条目将被 3 个文件中的第 2 行替换,然后下一个文件的条目将被 3 个文件中的第 3 行替换,然后所有文件文件中的第 3 行等等

原始文件和预期输出如下:

WORKSTATION#JOB_NAME
SCRIPTNAME "^TWSSCRIPTS^SCRIPT"
STREAMLOGON "^TWSUSER^"
-job JOB_NAME -user USER_ID -i JOB_ID
RECOVERY STOP



WORKSTATION#VBDSBQ_KFGP_SAPECC_PRGX_ACCNT_WKLY
SCRIPTNAME "^TWSSCRIPTS^SCRIPT"
STREAMLOGON "^TWSUSER^"
-job VBDSBQ_KFGP_SAPECC_PRGX_ACCNT_WKLY -user MCMILS03 -i 8970597895
RECOVERY STOP

这就是我所知道的(我再次知道它是废话)

file="/dir/dir/dir/file1"

while IFS= read -r line
do
cat dummy_file | sed "s/JOB_NAME/$file1/" | sed "s/JOB_ID/$file2/" | sed "s/USER_ID/$file3"  #####this is where i get stuck as i dont know how to reference file2 and file3##### >>new_file.txt
done

最佳答案

您确实不想在 shell 中使用 do/while 循环。只要这样做:

awk '/^WORKSTATION/{
    getline jobname < "file1"; 
    getline user_id < "file2"; 
    getline job_id < "file3"
    }
    { 
    gsub("JOB_NAME", jobname); 
    gsub("USER_ID", user_id); 
    gsub("JOB_ID", job_id)
    }1'  dummy_file

关于bash - 使用 read line do 读取多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60667539/

相关文章:

java - 安卓开发: Line Spacing With Line Numbering

git - 如何使使用 git bash(触摸文件)创建的文件在 Windows 8.1 中可见?

bash - 下载直播流时,如何使 youtube-dl 或 streamlink 在一段时间后停止

linux - Sed - 模式的条件匹配

regex - 使用 Bash 将字符串添加到正则表达式匹配前面

linux - 使用 sed - shell 脚本将值 append 到变量

按斜率排序线

sed - 通过 'sed' 将破折号插入字符串

linux - 用于 rsync ssh 用户输入的 bash 脚本

bash - sh: 如何扩展环境变量?