行番号がファイルに保存されたら、複数行を文字列に置き換えます。

行番号がファイルに保存されたら、複数行を文字列に置き換えます。

数百万行のファイルがありますが、すべて同じです。 1つの例は次のとおりです。

Known
Known
Known
Known
Known
Known
...

何千もの行番号を含む別のファイルがあります。たとえば、次のようになります。

3
5
6
...

UnKnownなどのbashコマンドを使用してこの行を別の文字列に置き換える簡単な方法があるかどうか疑問に思います。作成する例に基づいて、次の操作を行います。

Known
Known
UnKnown
Known
UnKnown
UnKnown
...

ベストアンサー1

解決策awk

$ awk 'NR==FNR{a[$1]++;next}
       { 
        if(FNR in a){
            print "UnKnown"
        }
        else{
            print
        }
       }' nums file
Known
Known
UnKnown
Known
UnKnown
UnKnown

説明する

  • NR==FNR{a[$1]++;next}: はNR入力の現在行番号、FNR現在のファイルの現在行番号です。 2 つは、最初のファイルを読み取る場合にのみ同じです。したがって、この式は各行$1番号(最初のファイルの最初のフィールド)を配列のキーとして保存し、次の行に移動しますa
  • if(FNR in a){ print "UnKnown"}:現在のファイルの行番号が最初のファイルにある場合は、「UnKnown」を印刷します。
  • else {print}:そうでない場合は、現在の行を印刷します。

おすすめ記事