Linux
用行號替換另一個文件中原始文件中的行
原文:
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