Awk

如何使 awk 命令名稱的輸出文件唯一?

  • July 8, 2019

我正在使用命令:

$output = shell_exec('awk -F, \'NR==FNR{seen[$0]++;next} ($1 in seen)\' uploads/a.txt uploads/b.txt > exports/output.txt');

我怎樣才能讓 output.txt 每次都是唯一的名稱?

以下是從命令行執行此操作的方法:

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[]a[]因為seen[]習慣上用於辨識一組輸入中的唯一值(例如在一個文件中),而不是測試一個值是否出現在一個文件中,然後在您使用它時再次出現在第二個文件中. 該名稱a[]最常用於此目的。

引用自:https://unix.stackexchange.com/questions/528747