私は次のコマンドを使用しています:
$output = shell_exec('awk -F, \'NR==FNR{seen[$0]++;next} ($1 in seen)\' uploads/a.txt uploads/b.txt > exports/output.txt');
出力.txtを毎回一意の名前にする方法は?
答え1
コマンドラインで実行する方法は次のとおりです。
awk -F, '
BEGIN {
for (1=3; i<ARGC; i++) {
split(ARGV[i],parts,/[_.]/)
num = parts[2]+0
max = (max > num ? max : num)
ARGV[i] = ""
}
ARGC -= 2
out = "exports/output_" max+1 ".txt"
print out
}
NR==FNR { a[$0]++; next }
$1 in a { print > out }
' uploads/a.txt uploads/b.txt exports/output_*.txt
PHPや他の場所で呼び出すために必要なすべてを追加しましょう。
上記では、エクスポートディレクトリ内のすべてのファイルがこのスクリプトによって生成されたか、同じoutput_<number>.txt
形式に従うと想定しています。
配列名をからに変更したseen[]
理由は、通常、値がファイルに表示され、2番目のファイルで使用されたときに再表示されるかどうかをテストするのではなく、入力セット(ファイルなど)で一意の値を識別するために使用されるためa[]
です。seen[]
。この名前はa[]
この目的で最も一般的に使用されます。