-1

这是我想要做的。

文件1:

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 脚本来实现这一点。

4

5 回答 5

0

使用pasteawk

$ 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
于 2013-01-22T23:19:24.050 回答
0
awk 'NR==FNR{a[NR]=$0;next} sub(/&/,a[FNR])' file1 file2
于 2013-01-22T23:30:44.753 回答
0
paste file1 file2 | awk 'gsub( /&/, $1 )' | cut -f2-
于 2013-01-22T23:59:54.833 回答
0

试试这个

awk '{if (NR == FNR){f[NR]= $0;}else {gsub("&",f[FNR],$0); print $0}}' file1.txt file2.txt
于 2013-01-23T02:04:46.483 回答
0

这可能对您有用(GNU sed):

sed = file1 | sed -r 'N;s/(.*)\n(.*)/\1s|\&$|\2|/' | sed -f - file2
  1. sed = file1生成行号
  2. sed -r 'N;s/(.*)\n(.*)/\1s|\&$|\2|/'将行号与数据行结合起来,并使用行号作为地址生成一个 sed 替换命令。
  3. sed -f - file2-f使用开关和标准输入将上述命令输入到 sed 调用中-
于 2013-01-23T11:21:14.663 回答