いいですね。迅速な方法を探しています。テキストデータファイルに変更する必要がある行番号のリストがあります。ラインの16ビットモードは何でも構いませんが、XXXXXXXXXXXXXXXX
ライン番号に応じて読み取りのみを可能にするように変更する必要があります。もう一度変更する必要がある行番号の長いリストがあります。変更する線には明確なパターンはありません。 (データスキーマを作成していませんが、すべてのデータを読み取るためにどの行を変更する必要があるかを知っています。
まだ明確でない場合は、別の方法で説明します。
ファイルの26115、32198、37256、40001、40023行を読み取るように変更しますXXXXXXXXXXXXXXX
。 190万行のファイルで変更する行が100,000を超えています。
ベストアンサー1
@Gillesの答えへの拡張としてファイルに変更する必要がある行番号があると言ったので(並べ替えられ、呼び出されたとしますlinums
)
awk '
BEGIN { getline NEXT < "linums" }
NR == NEXT { $0 = "XXXXXXXXXXXXXXX"; getline NEXT < "linums" }
1
'
これは、数千の行番号を手動で入力することなく、数千の行を変更するのに適しています。
または、わずかに変更すると、変更したい行番号またはファイルを取得できますstdin
。これに対してスクリプトを作成します。 (と呼びますredact.awk
)
#!/usr/bin/awk -f
BEGIN {
LINUMS = ARGV[1]
ARGV[1] = ARGV[2]
--ARGC
getline NEXT < LINUMS
}
NR == NEXT {
$0 = "XXXXXXXXXXXXXXX"
getline NEXT < LINUMS
}
1
その後、次のいずれかを使用できます。
$ ./redact.awk linums file-to-be-changed
$ ./redact.awk - file-to-be-changed
$ ./redact.awk linums -
$ ./redact.awk linums
(後者の2つは同じです)