ここで予想通り、区切り文字の操作が中断されないのはなぜですか?

ここで予想通り、区切り文字の操作が中断されないのはなぜですか?

このファイルを入力として持っています。

root      1243  0.0  0.0  65508  6036 ?        Ss   Apr30   0:05 /usr/sbin/sshd -D
root      7385  0.0  0.1 152932 10644 ?        Ss   16:22   0:00 sshd: per1 [priv]
per2  7425  0.0  0.0 152932  6216 ?        S    16:22   0:00 sshd: per2@pts/7
root      8256  0.0  0.1 152876 10240 ?        Ss   16:32   0:00 sshd: per3 [priv]
per3  8298  0.0  0.0 152876  5308 ?        S    16:32   0:00 sshd: per3@pts/9

最初の列の識別名を選択できるようにしたいです。

cut -f 1 file.txt | sort | uniqしかし、これはうまくいきません。私はそれをしたいcut -f 1 -d " " file.txt ...

なぜこれを追加するのですか-d 1?私が理解したのは、列の間の空間です。いいえタブが何であるかを書く必要があります。この場合はなので、" "これを作成しました。そうですか?

それでは、ここで2番目の列を選択する方法は?ちょうど変わったのですcut -f 1cut -f 2、それはできませんでした。私の出力は多くの空行ですか?なぜ?なぜ動作しますcut -f 1が、2は動作しませんか?

ベストアンサー1

先に欲しいならスペース-separate fieldsをcut使用するには、メインタブの代わりにスペースを使用するように指示する必要があります。

https://linux.die.net/man/1/cut

-d, --delimiter=削除

フィールド区切り文字としてTABの代わりにDELIMを使用してください。

cutスペースを区切り文字として使用するように指定すると、「フィールド2」は最初のスペースの後の最初のバイトになります(別の区切り文字が表示されるまで)。これは A スペースです。

次のデータを例として使用してください。

root 1space 2space 3space

...前に空白1個1space、前に空白2個2space、空白3個の前に来ます3space

$ seq 1 7 | while read index; do echo "$index" - "$(cut -d' ' -f $index < input)"; done
1 - root
2 - 1space
3 -
4 - 2space
5 -
6 -
7 - 3space

入力のフィールドはさまざまな量のスペースで区切られます。

  • データを「変更」できる場合は、sedSteeldriver:に示すように複数のスペースを1つにしますsed 's/ */ /g' < input | cut -d' ' -f2
  • awkそれ以外の場合は、フィールドを複数の後続のフィールド区切り文字に分割する次のツールを使用することをお勧めします。awk '{print $2}' < input

おすすめ記事