31

多くの行を含むファイルがあり、Linux コマンドを使用して各行の最初の単語だけを表示したいと考えています。

どうやってやるの?

4

6 に答える 6

44

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

grep -Eo '^[^ ]+' file
于 2013-03-15T14:21:05.390 に答える
42

使用できますawk

awk '{print $1}' your_file

$1これにより、 の最初の列 ( )が「印刷」されyour_fileます。

于 2013-03-15T14:20:22.720 に答える
13

でこれをやってみてくださいcoreutils cut

cut -d' ' -f1 file
于 2013-03-15T14:24:10.610 に答える
3

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

sed 's/ .*//' fileName
于 2013-03-15T14:21:44.247 に答える
2

上記の解決策は、特定のケースに適しているようです。質問のより一般的な用途については、単語は一般に空白で区切られていると定義されていると考えてください。ただし、必ずしもスペース文字である必要はありません。たとえば、ファイル内の列はタブで区切られている場合もあれば、タブとスペースを組み合わせて区切られている場合もあります。

前の例はすべてスペースで区切られた単語を見つけるのに役立ちますが、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]
于 2013-03-15T19:36:35.967 に答える
0

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

grep -Eo "^[^ ]+" file
于 2013-12-19T23:37:14.153 に答える