2016-12-01 31 views
0

我想Main.txt比較Today.txt的文件名。 如果有匹配,然後打印Main.txt匹配的文件和Today.txt的時間列的所有6列有一個新的文件說matched.txt。比較兩個文件與通用文件名,但希望從兩者都輸出匹配,如何使用awk?

和不與Main.txt相匹配的文件,然後列出TODAY.txt的文件名和時間在一個新的文件說unmatched.txt

注意:加號(+)表示文件是從INPROGRESS目錄,有時文件名會附加「+」。

Main.txt

date  filename   timestamp space count status 
Nov 4 +CHCK01_20161104.txt 06:39 2.15M 17153 on_time 
Nov 4 TRIPS11_20161104.txt 09:03 0.00M 24  On_Time 
Nov 4 AR02_20161104.txt 09:31 0.00M 7  On_Time 
Nov 4 AR01_20161104.txt 09:31 0.04M 433  On_Time 

Today.txt

filename  time 
CHCK01_20161104.txt 06:03 
CHCK05_20161104.txt 11:10 
CHCK09_20161104.txt 21:46 
AR01_20161104.txt 09:36 
AR02_20161104.txt 09:36 
ifs01_20161104.txt 21:16 
TRIPS11_20161104.txt 09:16 

所需的輸出: matched.txt

Nov 4 +CHCK01_20161104.txt 06:39 06:03 2.15M 17153 on_time 
Nov 4 TRIPS11_20161104.txt 09:03 09:16 0.00M 24  On_Time 
Nov 4 AR02_20161104.txt 09:31 09:36 0.00M 7  On_Time 
Nov 4 AR01_20161104.txt 09:31 09:36 0.04M 433  On_Time 

unmatched.txt

CHCK05_20161104.txt 11:10 
CHCK09_20161104.txt 21:46 
ifs01_20161104.txt 21:16 

下面的命令給了我正確的輸出,除了Today.txt的第2列輸出,請幫我在這嗎?

awk 'FNR==1{next} 
NR==FNR{a[$1]=$2; next} 
{k=$3; sub(/^\+/,"",k)} k in a{print; delete a[k]} 
END{for(k in a) print k,a[k] > "unmatched.txt"}' Today.txt Main.txt > matched.txt 

非常感謝!

+0

是否'main.txt'和'today.txt'具有報頭所示例子中? – nu11p01n73R

+0

是的,有頭在那裏,但我不希望在我的匹配或不匹配的輸出頭,感謝 – Barcode

+0

和'main.txt'是'today.txt'要這些文件出現一次? – nu11p01n73R

回答

0

假設在today.txt文件名只出現在main.tx一次,你可以寫一個awk腳本

$ cat prog.awk 
NR==FNR && NR>1{file[$1]=$2; next} 
$3 in file{$4 = $4" "file[$3]; print > "matched.txt"; delete file[$3]} 
END{for (filename in file) print filename, file[filename] > "unmatched.txt"} 

$ awk -F"[ +]*" -f prog.awk today main 
  • -F"[ +]*"設置字段分隔符爲空間或+。這將被用來從文件名中刪除+
+0

它不是爲我工作:( – Barcode

+0

您能否提供我什麼需要在我編寫的代碼(代碼在我的闕)是否會改變? – Barcode

相關問題