一个文件的值更改另一个文件中的相应值?

Values of one file to change corresponding value in another file?

我需要有关简单破折号脚本解决方案的帮助。读取文件值的脚本:“Install.txt”,(示例内容):

TRUE 203
TRUE 301
TRUE 602
TRUE 603

这些数字将与文件中的相同数字(在行尾)相对应:“ExtraExt.sys”,(示例内容):

# Read $[EXTRA_DIR]/diaryThumbPlace #202
# Read $[CORE_DIR]/myBorderStyle #203
# Read $[EXTRA_DIR]/mMenu #301
# Read $[EXTRA_DIR]/dDecor #501
# Read $[EXTRA_DIR]/controlPg #601
# Read $[EXTRA_DIR]/DashToDock #602
# Read $[EXTRA_DIR]/deskSwitch #603

所有行都带有标记 (#)。该脚本将取消标记与文件“install.txt”中具有相同编号的相应行。例如,TRUE 203 将取消标记以 #203

结尾的行
# Read $[CORE_DIR]/myBorderStyle #203

到(阅读前没有“#”)

Read $[CORE_DIR]/myBorderStyle #203

我搜索了 awk/sed 解决方案,但这需要一个循环来遍历 Install.txt 中的数字。

感谢任何帮助。谢谢。

你可以试试,

# store "203|301|602|603" in search variable
search=$(awk 'BEGIN{OFS=ORS=""}{if(NR>1){print "|"}print ;}' Install.txt)
sed -r "s/^# (.*#($search))$//g" ExtraExt.sys

你明白了,

# Read $[EXTRA_DIR]/diaryThumbPlace #202
Read $[CORE_DIR]/myBorderStyle #203
Read $[EXTRA_DIR]/mMenu #301
# Read $[EXTRA_DIR]/dDecor #501
# Read $[EXTRA_DIR]/controlPg #601
Read $[EXTRA_DIR]/DashToDock #602
Read $[EXTRA_DIR]/deskSwitch #603

或者,-i 文件编辑选项

sed -i -r "s/^# (.*#($search))$//g" ExtraExt.sys

使用 awk 的一个选项可能是读取第一个文件 Install.txt 并将第二个字段的值存储在 arr

读取第二个文件 ExtraExt.sys 您可以使用 $NF 获取最后一列的数字并将其与模式 ^#[0-9]+$[ 匹配=18=]

如果有匹配,从匹配中删除 # 部分,只留下数字并检查数字是否在 arr.

如果是,打印当前行,不带前导#

awk '
FNR==NR{
  arr[]
  next
}

match ($NF, /^#[0-9]+$/) {
  if (substr($NF, RSTART+1, RLENGTH) in arr) {
    sub(/^#[[:space:]]+/, "", [=10=]); print [=10=]
  }
}
' Install.txt ExtraExt.sys

输出

Read $[CORE_DIR]/myBorderStyle #203
Read $[EXTRA_DIR]/mMenu #301
Read $[EXTRA_DIR]/DashToDock #602
Read $[EXTRA_DIR]/deskSwitch #603