原文:
yes
no
approved
declined
第二段文字
1111 1
333 4
1
是4
我想在原始文本中替换的行号
输出:
1111
no
approved
333
如何处理这个问题
答案1
短的awk方法:
awk 'NR==FNR{ a[$2]=$1; next }FNR in a{ $0=a[FNR] }1' file2 file1
a[$2]=$1
-$1
使用第二个字段值$2
作为数组a
索引捕获第一个字段值(当处理第一个输入文件时file2
)$0=a[FNR]
- 用当前记录号的值替换整行FNR
(处理 时file1
)
输出:
1111
no
approved
333
答案2
如果您喜欢程序生成程序,您可以使用 awk 创建 sed 脚本:
awk '{printf "%dc\\\n%s\n", $2, $1}' < second | sed -f - original
如果您的 sed 接受脚本的 stdin,或者:
awk '{printf "%dc\\\n%s\n", $2, $1}' < second > tempfile &&
sed -f tempfile original &&
rm tempfile
如果您的 sed 不接受脚本的标准输入。
中间 sed 脚本与您的示例输入类似:
1c\
1111
4c\
333