多くの行を含むファイルがあり、Linux コマンドを使用して各行の最初の単語だけを表示したいと考えています。
どうやってやるの?
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
空のフィールド、つまり空白で始まる行の可能性についても懸念している場合は、より堅牢なソリューションが必要です。私はそのような場合にワンライナーを作成するのに十分な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