web-dev-qa-db-ja.com

linuxコマンドを使用して、ファイルの各行の最初のWordを表示する方法は?

多くの行を含むファイルがあり、Linuxコマンドで各行の最初のWordのみを表示したい。

どうやってやるの?

23
MOHAMED

grep を使用してこれを試してください:

grep -Eo '^[^ ]+' file
37
Gilles Quenot

awkを使用できます:

awk '{print $1}' your_file

これにより、最初の列($1your_file

33
newfurniturey

coreutils cutでこれを試してください:

cut -d' ' -f1 file
9
Gilles Quenot

すでに答えがあります。ただし、sedを使用してこれを行うこともできます。

sed 's/ .*//' fileName
3
Memento Mori

上記のソリューションは、特定のケースに適合するようです。質問をより一般的に適用するために、単語は一般に空白で区切られていると定義されているが、必ずしもスペース文字が明確に定義されているわけではないことを考慮してください。ファイル内の列は、たとえばタブで区切られていたり、タブとスペースの混合で区切られていたりする場合があります。

前の例はすべてスペースで区切られた単語を見つけるのに役立ちますが、awkの例だけが他の空白文字で区切られた単語も見つけます(実際、これはさまざまなsed/grepバージョン間で均一に行うのがかなり難しいことが判明しています)。 awkステートメントを次のように修正することにより、空の行を明示的にスキップすることもできます。

awk '{if ($1 !="") print $1}' your_file

空のfieldsの可能性、つまりbeginが空白である可能性についても懸念がある場合は、より堅牢なソリューションが適切です。私はそのような場合にワンライナーを生成するのに十分なawkではありませんが、トリックを行う短いpythonスクリプトは次のようになります:

>>> import re
>>> for line in open('your_file'):
...     words = re.split(r'\s', line)
...     if words and words[0]:
...         print words[0]
1
Jeffrey Froman

...またはWindowsの場合(GnuWin32 grepがある場合):

grep -Eo "^[^ ]+" file
0
user3038458