オリジナル:
yes
no
approved
declined
2番目の段落
1111 1
333 4
1
4
元のテキストで置き換えたい行番号です。
出力:
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
使用して最初のフィールド値をキャプチャする(最初の入力ファイルを処理するとき)$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