Chinaunix
标题:
sed 文本替换 求大神指点
[打印本页]
作者:
潇潇幕友
时间:
2017-01-20 00:04
标题:
sed 文本替换 求大神指点
本帖最后由 潇潇幕友 于 2017-01-20 00:03 编辑
有文件
a.txt
111 222
222 333
333 444
b.txt
aaa AAA
bbb BBB
ccc CCC
每次获取b.txt的一行,并将a.txt中的111替换成获取到内容的第1列,222替换成获取到内容的第2列;且将结果追加输出到c.txt。输出结果如下:
aaa AAA
AAA 333
333 444
bbb BBB
BBB 333
333 444
ccc CCC
CCC 333
333 444
如何通过脚本实现?求大神指点!!!
作者:
jason680
时间:
2017-01-20 03:38
回复
1#
潇潇幕友
$ awk 'FNR==NR{for(n=1;n<=NF;++n)a[NR,n]=$n;R=NR;next}{delete c;for(r=1;r<=R;++r){s="";for(n=1;n<=NF;++n){if(r==1)c[a[1,n]]=$n;s=s (c[a[r,n]]?c[a[r,n]]:a[r,n])" "}print s}}' a.txt b.txt
aa AAA
AAA 333
333 444
bbb BBB
BBB 333
333 444
ccc CCC
CCC 333
333 444
作者:
jcdiy0601
时间:
2017-01-20 10:06
#!/bin/bash
while read line
do
a=`echo ${line}|awk '{print $1}'`
b=`echo ${line}|awk '{print $2}'`
cat a.txt|sed 's/111/'$a'/;s/222/'$b'/' >> c.txt
done < b.txt
复制代码
#!/usr/bin/env python
#_*_ coding:utf-8 _*_
# Author: jiachen
FileName1 = "a"
FileName2 = "b"
FileList = []
def read_file(file_name,file_list):
with open(file_name,"r") as read_f:
for line in read_f.readlines():
file_list.append(line.strip().split())
return file_list
def write_file(file_name,new_file_name,file_list):
with open(file_name,"r") as read_f,open(new_file_name,"w") as write_f:
for i in file_list:
x,y = i[0],i[1]
while True:
content = read_f.readline().strip()
if content:
content = content.replace("111",x)
content = content.replace("222",y)
write_f.write(content + "\n")
else:
read_f.seek(0)
break
return 1
if __name__ == "__main__":
FileList = read_file(FileName2,FileList)
write_file(FileName1,"c",FileList)
复制代码
作者:
haooooaaa
时间:
2017-01-20 10:52
awk 'NR==FNR{$1=$1;s=s?s"\n"$0:$0;next}{m=s;gsub("111",$1,m);gsub("222",$2,m);print m}' a b
aaa AAA
AAA 333
333 444
bbb BBB
BBB 333
333 444
ccc CCC
CCC 333
333 444
复制代码
作者:
haooooaaa
时间:
2017-01-20 11:55
本帖最后由 haooooaaa 于 2017-01-20 14:10 编辑
sed -rn '/^[0-9]/H;/^[a-z]/{G;s/(^\S+)(.+)(111)/\1\2\1/g;:a;s/(^\S+) (\S+)(.+)(222)/\1 \2\3\2/;ta;s/^[^\n]+\n+//;p}' a b
aaa AAA
AAA 333
333 444
bbb BBB
BBB 333
333 444
ccc CCC
CCC 333
333 444
复制代码
作者:
moperyblue
时间:
2017-01-20 15:14
sed -r '1{x;s/.*/sed 1d a.txt/e;x};G;s/(\S+)\n\S+/\1\n\1/' b.txt
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2