2つの列で区切られたファイルがあり、両方のファイルにトランザクション識別子が見つかったレコードのみを含む2つの新しいファイルを作成する必要があります。識別子は列9から14までのフィールドにありますが、各ファイルの各レコードには9から14の範囲の前後に固有のデータがあり、可変データを出力ファイルに転送する必要があります。各識別子は一度だけ現れるか、まったく現れないように保証されます。
私はPythonスクリプトを使って直接書くことができますが、ライブラリ内の列で区切られたファイルの基本的なサポートはあまりありません。以前のコンピューティング時代に合わせて作成されたため、この問題は簡単に処理できます。もちろん、ツールが古すぎる場合は、Pythonスクリプトを直接作成します(列で区切られたファイルを処理するパッケージを知っている場合を除く)。
ご協力ありがとうございます。
例:列9〜14の文字を含む行が各ファイルにあるため、ID:525
この行はその出力ファイルに書き込まれます。両方の入力ファイルには、他のファイルに見つからないレコードがあります。
入力ファイル1.txt
Record1 ID:525 DATA A
Record2 ID:232 DATA B
Record3 ID:811 DATA C
Record4 ID:400 DATA D
入力ファイル2.txt
Record1 ID:448 DATA E
Record2 ID:525 DATA F
出力ファイル1.txt
Record1 ID:525 DATA A
出力ファイル2.txt
Record2 ID:525 DATA F
ベストアンサー1
GNU awk(別名)はUbuntu 20.04で使用でき、そのgawk
変数を介して固定幅データを処理できます。FIELDWIDTHS
前任者。最も簡単に言えば
$ cat input_file1.txt
Record1 ID:525 DATA A
Record2 ID:232 DATA B
Record3 ID:811 DATA C
Record4 ID:400 DATA D
それから
$ gawk 'BEGIN{FIELDWIDTHS="8 6 *"} {print $2}' input_file1.txt
ID:525
ID:232
ID:811
ID:400
これに基づいて、次のことができます。
$ gawk '
BEGIN {FIELDWIDTHS = "8 6 *"}
BEGINFILE {outfile[ARGIND] = gensub("input","output","1",FILENAME)}
NR==FNR {a[$2] = $0; next}
($2 in a){
print a[$2] > outfile[1]
print $0 > outfile[2]
}
' input_file1.txt input_file2.txt
与える
$ head output_file?.txt
==> output_file1.txt <==
Record1 ID:525 DATA A
==> output_file2.txt <==
Record2 ID:525 DATA F