sed:用公认的字符替换文本文件中的部分行与另一个文件中的整行
问题描述:
我有许多组对应的.txt文件。我想识别第一个.txt文件(text1.txt)中的特定字符":"
,然后用其他.txt文件(text2.txt)中的相应行替换它(以及text1.txt中其余行) 。我还想在复制的值之前添加一个额外的字符"*"
。sed:用公认的字符替换文本文件中的部分行与另一个文件中的整行
text1.txt看起来是这样的:
*
10.04:60.429
*
*
*
12.023:60.078
*
9.033:60.045
*
9.023:60.062
*
*
和text2.txt看起来是这样的:
*
11
*
*
*
4
*
10
*
9
*
*
输出应该是这样的:
*
10.04*11
*
*
*
12.023*4
*
9.033*10
*
9.023*9
*
*
任何想用sed做这件事的最佳方法?
答
下面awk
脚本应该做
awk 'BEGIN{i=1;j=1}
NR==FNR{text1[i++]=$0;next}
/:/{gsub(/:[^:]*/,"*" text1[j],$0)}
#Note :[^:] looks for the last occurence of : in text1 strings
{j++}1' text2.txt text1.txt
结果
*
10.04*11
*
*
*
12.023*4
*
9.033*10
*
9.023*9
*
*
你尝试过这么远吗? – sjsam
sed -i和sed -e但我无法动态地从第二个文本文件中找到值,并且在不知道要替换的值的情况下替换部分行 – Kosagl