2013-10-16 40 views
1

我有以下內容的兩個文本文件:數據整合

FILE1.TXT:

ProcessId VirtualSize 
5752  74649600  
3932  76843610 
1357  90215638 
& so on.... 

FILE2.TXT:

Notepad.exe pid: 3932 Linux 
Notepad.exe pid: 1357 Macos 
Notepad.exe pid: 5752 Windows 
& so on.... 

現在作爲,我們可以看到進程id在兩個文件中都是相同的(匹配),所以我想要生成一個統一的單個輸出文件(匹配processId在兩個文件),它應該具有以下內容:

Output.txt的:

Windows 74649600 
Linux 76843610 
Macos 90215638 
& so on.... 

我下面嘗試,它的運行,但沒有得到所需的輸出:

@echo off 
(for /f "skip=1 tokens=1,2" %%a in (file1.txt) do (
for /f "tokens=5" %%c in ('find " %%a " ^< file2.txt ') do echo %%c %%b 
))>Output.txt 

EDIT1: 什麼我應該添加,如果我想修復/設置'Output.txt'的前兩行爲字符串永遠:

This output is for first server 
Applcation Memory(GB) 

即:

Output.txt的:

This output is for first server 
Applcation Memory(GB) 
Windows 74649600 
Linux 76843610 
Macos 90215638 
& so on.... 

回答

1

怎麼樣:

@echo off 

echo This output is for HFM server > out.txt 
echo Applcation Memory(GB) >>out.txt 

for /f "skip=1 tokens=1,2" %%a in (file1.txt) do (
    for /f "skip=2 tokens=5" %%c in ('find " %%a " file2.txt 2^>nul') do ( 
    echo %%c %%b >>out.txt 
) 
) 

+0

running..but沒有輸出..! – Sunny

+0

有一個多餘的開放括號。你可以嘗試沒有'>> out.txt'看看會發生什麼? – npocmaka

+0

否輸出它的生成... :( – Sunny

2

你的第二個FOR應該像下面這樣。 「令牌= 5」部分選擇第5個令牌,沒有別的。您需要令牌3和5.

(for /f "skip=1 tokens=1,2" %%a in (file1.txt) do (
    for /f "tokens=3,5" %%x in ('find " %%a " ^< file2.txt ') do echo %%b %%y 
)) 

如果File1和File2很長,那麼該腳本可以工作,但會非常慢。 我寫了一個腳本,重新格式化file1和file2,讓PID成爲每行中的第一件事。 然後,使用SORT按PID組織文件。 最後,掃描排序後的輸出,尋找匹配PID的線對。

有點長,但很容易看到它是如何工作的。

@echo off 
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION 

set INPUT1=file1.txt 
set INPUT2=file2.txt 
set OUTFILE=Outfile.txt 
set TMPFILE=OutfileTMP.txt 
set OUT=^>^>%OUTFILE% 

if exist %OUTFILE% del %OUTFILE% 
if exist %TMPFILE% del %TMPFILE% 

call :ReadFile1 
call :ReadFile2 

sort < %OUTFILE% > %TMPFILE% 
del %OUTFILE% 
echo This output is for HFM server%OUT% 
echo Applcation Memory(GB)%OUT% 

set LASTPID=- 
set LASTSIZE=- 

for /f "tokens=1,2,3" %%a in (%TMPFILE%) do (
    if "%%b"=="1" set LASTPID=%%a&set LASTSIZE=%%c 
    if "%%b"=="2" (
     if "%%a"=="!LASTPID!" (
      echo %%c !LASTSIZE! %OUT% 
     ) else (
      echo Error: Not Matched: 1:!LASTPID!,!LASTSIZE!, 2:%%a %%c 
     ) 
    ) 
) 

del %TMPFILE% 

goto :EOF 


:ReadFile1 
    for /f "skip=1 tokens=1,2" %%a in (%INPUT1%) do echo %%a 1 %%b %OUT% 
    goto :EOF 

:ReadFile2 
    for /f "tokens=3,5" %%a in (%INPUT2%) do echo %%a 2 %%b %OUT% 
    goto :EOF 
+0

Joeking..thanks ..但它沒有創建Outfile.txt文件。 – Sunny

+0

,我試着修改其中一個也..但仍然沒有輸出..! – Sunny

+0

根本沒有輸出? 你在使用什麼操作系統? 我使用Windows 7 - 但我不認爲這裏有任何版本依賴。 – joeking