我是打击行动的完全新手。我有两个文件,我们称之为文件A和文件B.
在文件A中我有这样一行:
STRING_TO_BE_SEARCHED = "SOME_STRING_IN_FILE_B"
在文件B中,我也有一个类似的行,只有字符串不同,如下所示:
STRING_TO_BE_SEARCHED
我需要做的是在两个文件中找到以{{1}}开头的行,并用A中相应的行替换文件B中的相应行。
我怎样才能做到这一点?是否可以在一个命令中执行此操作?
答案 0 :(得分:2)
使用awk你可以做到这一点。这将首先扫描fileA,扫描第一个文件以获取给定的搜索字符串,然后使用它来替换fileB中的值。
awk -v s='STRING_TO_BE_SEARCHED' 'BEGIN{ FS=OFS=" = " } FNR == NR && $1 == s {
a[$1] = $2; next } $1 in a { $2 = a[$1] } 1' fileA fileB
要将更改保存到fileB
,请使用:
awk -v s='STRING_TO_BE_SEARCHED' 'BEGIN{ FS=OFS=" = " } FNR == NR && $1 == s {
a[$1] = $2; next } $1 in a { $2 = a[$1] } 1' fileA fileB > $$.tmp && mv $$.tmp fileB
答案 1 :(得分:1)
如果你没有任何特殊字符,或许两步require("ggplot2")
require("gridExtra")
dataToPlot <- data.frame(
"Person" = c("Alice", "Bob", "Carlton"),
"Age" = c(14, 63, 24),
"Score" = c(73, 62.1, 21.5))
plot1 <- ggplot(dataToPlot) +
geom_bar(data = dataToPlot, aes(x = Person, y = Score), stat = "identity",
fill = "blue", width = 0.8) +
scale_y_continuous(trans = "reverse", expand = c(0, 0)) +
scale_x_discrete(position = "top") +
theme(
axis.text.y = element_blank()
) +
labs(x = NULL) +
coord_flip()
plot2 <- ggplot(dataToPlot) +
geom_bar(data = dataToPlot, aes(x = Person, y = Age), stat = "identity",
fill = "red", width = 0.8) +
scale_y_continuous(expand = c(0, 0)) +
theme(
axis.text.y = element_text(size = 20, hjust = 0.5)
) +
labs(x = "") +
coord_flip()
gridExtra::grid.arrange(plot1, plot2, ncol = 2, widths = c(1, 1.2))
更容易
sed
您可以通过添加key='STRING_TO_BE_SEARCHED *= *'; \
val=$(sed 's/'"$key"'//' fileA); \
sed -r 's/('"$key"').*/\1'"$val"'/' fileB
STRING_TO_BE_SEARCHED = "SOME_STRING_IN_FILE_A"
选项进行第二次sed
替换。
答案 2 :(得分:1)
1-将行存储在变量lineA
中lineA=$(perl -ne 'if(/^\QSTRING_TO_BE_SEARCHED\E/){print;exit}' fileA)
2-替换fileB中的行,旧文件保存为.BAK
perl -i.BAK -pe 'BEGIN{$line=shift@ARGV}if(/^\QSTRING_TO_BE_SEARCHED\E/){$_="$line\n"}' "$lineA" fileB
或创建新文件:fileB.new而不更改fileB
perl -pe 'BEGIN{$line=shift@ARGV}if(/^\QSTRING_TO_BE_SEARCHED\E/){$_="$line\n"}' "$lineA" fileB > fileB.new