Linux

用行號替換另一個文件中原始文件中的行

  • April 9, 2020

原文:

yes
no
approved
declined

第二個文本

1111 1
333 4

1並且4是我想在原始文本中替換的行號

輸出:

1111
no
approved
333

如何處理這個

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

如果你喜歡程序生成程序,你可以使用 awk 創建一個 sed 腳本:

awk '{printf "%dc\\\n%s\n", $2, $1}' < second  | sed -f - original

如果您的 sed 接受腳本的標準輸入,或者:

awk '{printf "%dc\\\n%s\n", $2, $1}' < second > tempfile &&
sed -f tempfile original &&
rm tempfile

如果您的 sed 不接受腳本的標準輸入。

帶有範例輸入的中間 sed 腳本如下所示:

1c\
1111
4c\
333

引用自:https://unix.stackexchange.com/questions/406044