互換性テスト:

互換性テスト:

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" {} \;

関連情報