5000ファイルの最初の列に特定の文字列を含む行を取得したいと思います。
ファイル1
agd fkg fls ofk
ggs kkg ikg gkl
bsg ksf olg lzj
many more lines,,,
kgf kkg ikg lgk
ファイル2
gik zlg olg pzk
ppl sjg gol dzj
zjg iwj bmh hgi
many more lines,,,
kgf wlg ugk lkf
より多くのファイルがあります。
結果ファイル
kgf kkg ikg lgk
kgf wlg ugk lkf
more lines...
この場合、「kgf」など、最初の列が特定の文字列である各ファイルから行を取得したいと思います。
1つのファイルからデータをインポートする方法はわかっていますが、複数のファイルからデータをインポートする方法はわかりません。誰かが私に教えることができますか?
答え1
簡単に:
grep -rEh '^kgf\b' .
再帰的です。
-r、--recursiveコマンドラインにある場合にのみ、シンボリックリンクに沿って各ディレクトリの下のすべてのファイルを繰り返し読み込みます。ファイルオペランドが指定されていない場合、grepは作業ディレクトリを検索します。これは -d recurse オプションと同じです。
または、現在のディレクトリでワイルドカードを使用します。
grep -Eh '^kgf\b' *
互換性テスト:
- GNUとうまく動作します(驚きではありません)。
grep (GNU grep) 3.3
- FreeBSD 12.1でうまく動作します。
grep (GNU grep) 2.5.1-FreeBSD
- Minix3には(拡張正規表現と再帰も含む)スイッチが
grep version 0.9
ありますが、認識されません。-h
-E
-R
単語の境界\b
しかし、-w
だから
grep -wh '^kgf' *
または
grep -h '^kgf ' *
答え2
すべてのファイルをキャプチャしてパイプできます。grep
cat file1 file2 file3 | grep "^kgf"
あるいは、ディレクトリ内のすべてのファイルを検索するには、次のように言うことができます。
cat * | grep "^kgf"
そのディレクトリとその下のディレクトリのどこからでも表示するには、次のものを使用できます。
find dirname -type f -exec grep "^kgf" {} \;