行番号で元のファイルの行を別のファイルに置き換える

行番号で元のファイルの行を別のファイルに置き換える

オリジナル:

yes
no
approved
declined

2番目の段落

1111 1
333 4

14元のテキストで置き換えたい行番号です。

出力:

1111
no
approved
333

この問題を処理する方法

答え1

短いアッ方法:

awk 'NR==FNR{ a[$2]=$1; next }FNR in a{ $0=a[FNR] }1' file2 file1
  • a[$2]=$1- 2番目のフィールド値を配列インデックスとして$1使用して最初のフィールド値をキャプチャする(最初の入力ファイルを処理するとき)$2afile2
  • $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

関連情報