以行號取代另一個檔案中原始檔案中的行

以行號取代另一個檔案中原始檔案中的行

原文:

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

相關內容