示例日志文件:
apple AAA rose
banana AAA tulip
orange AAA marigold
替换文本文件:
111
222
333
预期输出:
apple 111 rose
banana 222 tulip
orange 333 marigold
答案1
给猫剥皮的方法有很多种。让我们假设两个文件之间的连接位于第 No 行。尝试例如这个,它将paste
行放在一起,然后将尾随单词移动到包含AAA
使用正则表达式“反向引用”的字段:
paste sample_log replacement-text | sed -r 's/AAA ([^[:space:]]*[[:space:]]*)(.*$)/\2 \1/'
apple 111 rose
banana 222 tulip
orange 333 marigold
或者这个,它将awk
替换读入数组,然后用相应的数组元素替换第二个字段:
awk 'NR==FNR {T[NR] = $0; next } {$2 = T[FNR]} 1' replacement-text sample_log
apple 111 rose
banana 222 tulip
orange 333 marigold
答案2
#!/bin/bash
paste logfile.txt replacement.txt | while IFS= read -r line; do
echo $line | sed "s/`echo $line | awk '{print $2}'`/`echo $line | awk '{print $4}'`/g" | awk '{print $1 " " $2 " " $3 " "}'
done