这是我想要做的。
File1中:
abc
bcd
cde
def
efg
fgh
ghi
文件2:
ip:/vol0/scratch/&
ip:/vol0/sysbuild/
ip:/vol0/cde
ip:/vol0/mnt/cm/&
ip:/vol0/&
ip:/vol0/mnt/fgh
ip:/vol0/mnt/&
正如您可以看到File2
在某些行的末尾有&
,我需要将&
替换为File1
中的相应行,并忽略没有&
例如,如果第2行和第3行没有&
,则脚本会跳过两个文件中的第2行和第3行,并转到第4行以替换&
如何使用shell脚本实现此目的。
答案 0 :(得分:0)
使用paste
和awk
:
$ paste file2 file1 | awk 'sub(/&\s+/,"")'
ip:/vol0/scratch/abc
ip:/vol0/mnt/cm/def
ip:/vol0/efg
ip:/vol0/mnt/ghi
如果您希望输出中的行不以&
结尾,则不是100%清除:
$ paste file2 file1 | awk '{sub(/&\s+/,"");print $1}'
ip:/vol0/scratch/abc
ip:/vol0/sysbuild/
ip:/vol0/cde
ip:/vol0/mnt/cm/def
ip:/vol0/efg
ip:/vol0/mnt/fgh
ip:/vol0/mnt/ghi
使用sed
:
$ paste file2 file1 | sed -rn '/&/s/&\s+//p'
ip:/vol0/scratch/abc
ip:/vol0/mnt/cm/def
ip:/vol0/efg
ip:/vol0/mnt/ghi
答案 1 :(得分:0)
awk 'NR==FNR{a[NR]=$0;next} sub(/&/,a[FNR])' file1 file2
答案 2 :(得分:0)
paste file1 file2 | awk 'gsub( /&/, $1 )' | cut -f2-
答案 3 :(得分:0)
试试这个
awk '{if (NR == FNR){f[NR]= $0;}else {gsub("&",f[FNR],$0); print $0}}' file1.txt file2.txt
答案 4 :(得分:0)
这可能适合你(GNU sed):
sed = file1 | sed -r 'N;s/(.*)\n(.*)/\1s|\&$|\2|/' | sed -f - file2
sed = file1
生成行号sed -r 'N;s/(.*)\n(.*)/\1s|\&$|\2|/'
将行号与数据行合并,并使用行号作为地址生成sed替换命令。sed -f - file2
使用-f
开关和标准输入-