2017-11-07 5 views
0

行の5番目のフィールドが検索文字列と一致する場合は、TAB区切りファイル内の文字列をチェックする必要がありますフルラインを別のファイルに印刷します。文字列がバッチコマンドのタブ区切りファイルの5番目のフィールドと一致する場合、ファイルにフルラインを印刷する方法

タブ区切り(in.txtを)ファイル:

123 phlips usa 34 asdf 123 
223 ryan usa 33 555  123 
324 alex usa 43 asdf 555 
235 bob  usa 22 555  123 
555 ken  usa 43 asdf 123 

検索文字列= 555

期待される出力ファイル(out.txtを):コマンドを下回るものの、プットから使用さ

223 ryan usa 33 555 123 
235 bob  usa 22 555 123 

最初のフィールドマッチラインが来たので、TAB区切りファイルでのみ5番目のフィールド検索のコマンドを修正する場所を教えてください。

findstr /b "\<555\>" in.txt >out.txt 

答えて

0

ビット、検索パターンを展開します。

findstr /BRC:".* .* .* .* 555 .*" in.txt >out.txt 

(悲しいことに、stackoverflowのは、タブをスペースに変換パターンにはスペース、タブだけはありません。)

. =「任意の文字* = "ゼロ以上"

もう1つの方法:明示的に25列目を取得して比較してください:

@echo off 

setlocal enabledelayedexpansion 
set "line=" 
for /l %%a in (1,1,50) do set "line=!line!%%a " 
echo %line%>t.txt 
set "line=" 
for /l %%a in (2,1,51) do set "line=!line!%%a " 
echo %line%>>t.txt 
set "line=" 
for /l %%a in (3,1,52) do set "line=!line!%%a " 
echo %line%>>t.txt 
set "line=" 
for /l %%a in (4,1,53) do set "line=!line!%%a " 
echo %line%>>t.txt 
set "line=" 
for /l %%a in (5,1,54) do set "line=!line!%%a " 
echo %line%>>t.txt 
set "line=" 
for /l %%a in (0,1,49) do set "line=!line!%%a " 
echo %line%>>t.txt 
endlocal 

REM above block is just to generate a testfile  

for /f "delims=" %%a in (t.txt) do (
    for /f "tokens=25" %%b in ("%%a") do (
    echo DebugLine. Column 25 is: "%%b" 
    if "%%b"=="25" echo %%a 
) 
) 

は(再び、それは、set "line=!line!%%a "ではスペースTABません。)

注:ちょうどfindstr
最大 "トークン" より

遅い31(for制限)*)
ですいずれかのフィールドが空の場合、これは失敗します。 (計算ミス、連続した区切り文字は1つとして扱われます)*)
特殊文字に問題があります。 *)

*)(

+0

@ stephan。あなたの助けに感謝します。私が "。 "555"が存在するが、 "。*"はどこでも "555" present.soと混同されている。 TABを使って25フィールドまでの間に "。"を使用してください。 – sasmi

+0

パターン内のドットはドットを表していませんが、 "任意の文字"(ワイルドカードのような)です。リテラルドットは '\ .'を使わなければなりません。また、パターンの長さには限界があります。だから、findstr(Magooの答えに触発された)に '/ b'が追加された" 25th filed " – Stephan

+0

に問題があるかもしれません。あなたの例では問題ありませんでしたが、多くの列がある場合は違いが生じます。 – Stephan

0
@ECHO Off 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "tab= " 
SET "nottab=[^%tab%]" 
SET "nottabsequence=%nottab%*" 
SET "filename1=%sourcedir%\q47151351.txt" 

FINDSTR /b /r /c:"%nottabsequence%%tab%%nottabsequence%%tab%%nottabsequence%%tab%%nottabsequence%%tab%555%tab%" "%filename1%" 

GOTO :EOF 

あなたは、あなたの状況に合わせてsourcedirの設定を変更する必要があります)より多くのコードを使用して修正することができますが、さらに遅い、それを行います。

テストのためにデータが入っているファイルq47151351.txtを使用しました。

変数nottabは、findstrany character except tabを指定する正規表現に設定されています。 Nottabsequenceをこのような文字のシーケンスに追加するだけで、何が起こっているのかを簡単に確認できます。 /bfindstrを意味し、matching at the beginning of the lineを意味します。

関連する問題