多くの行を含むファイルがあり、Linuxコマンドで各行の最初のWordのみを表示したい。
どうやってやるの?
grep を使用してこれを試してください:
grep -Eo '^[^ ]+' file
awk
を使用できます:
awk '{print $1}' your_file
これにより、最初の列($1
)your_file
。
coreutils cut
でこれを試してください:
cut -d' ' -f1 file
すでに答えがあります。ただし、sedを使用してこれを行うこともできます。
sed 's/ .*//' fileName
上記のソリューションは、特定のケースに適合するようです。質問をより一般的に適用するために、単語は一般に空白で区切られていると定義されているが、必ずしもスペース文字が明確に定義されているわけではないことを考慮してください。ファイル内の列は、たとえばタブで区切られていたり、タブとスペースの混合で区切られていたりする場合があります。
前の例はすべてスペースで区切られた単語を見つけるのに役立ちますが、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]
...またはWindowsの場合(GnuWin32 grepがある場合):
grep -Eo "^[^ ]+" file