按行号替换另一个文件中原始文件中的行

按行号替换另一个文件中原始文件中的行

原文:

yes
no
approved
declined

第二段文字

1111 1
333 4

14我想在原始文本中替换的行号

输出:

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

相关内容