【问题标题】:opening a file > replacing text in a loop in unix打开文件>在unix的循环中替换文本
【发布时间】:2016-01-20 09:59:10
【问题描述】:

我有一个文件 abc.csv 如下;-

sn,test,control
1,file1,file2
2,file3,file4

我还有另外一个配置文件 text.cfg 如下:-

model.input1 = /usr/bin/file1
model.input2 = /usr/bin/file2

现在我想将 file1 和 file2 替换为 file3 和 file4 分别然后 file5 和 file6 以此类推,直到 abc.csv 文件用完

我对这个问题的尝试是:-

IFS =","

while read NUM TEST CONTROL


X=""
Y=""

do
    echo "Serial Number :$NUM"
    echo "Test File :$TEST"
    echo "Control File:$CONTROL"

    sed -i -e 's/$A/$B/g' text.cfg

    X = $TEST
    Y = $CONTROL

done < abc.csv

输出应该是新的配置文件,如下所示:-

这是test1.cfg

model.input1 = /usr/bin/file1
model.input2 = /usr/bin/file2

那么第二个文件应该是test2.cfg

model.input1 = /usr/bin/file3
model.input2 = /usr/bin/file4

等等..

【问题讨论】:

  • 如果您还向我们展示了您期望从您显示的输入中获得的确切输出,那将会很有用。请edit你的问题这样做。
  • 我不明白你的要求。
  • 我需要通过循环遍历 abc.csv 文件中的每一行并逐行更改 abc.csv 文件中给出的文件名来更改 test.cfg 文件
  • IFS ="," 之类的东西是错误的,您应该将脚本粘贴到 www.shellcheck.net 以清除这些错误,然后专注于逻辑。

标签: linux loops unix awk sed


【解决方案1】:
awk -F, 'NR>1{i = 0; while(++i < NF){print "model.input"i" = /usr/bin/"$(i+1) >> "test"$1".cfg"} }' File

输出:

AMD$ cat test1.cfg
model.input1 = /usr/bin/file1
model.input2 = /usr/bin/file2
AMD$ cat test2.cfg
model.input1 = /usr/bin/file3
model.input2 = /usr/bin/file4

希望这会有所帮助。

【讨论】:

  • 谢谢!这就是我需要的!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
相关资源
最近更新 更多