このファイルを入力として持っています。
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 1
がcut -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
入力のフィールドはさまざまな量のスペースで区切られます。
- データを「変更」できる場合は、
sed
Steeldriver:に示すように複数のスペースを1つにしますsed 's/ */ /g' < input | cut -d' ' -f2
。 awk
それ以外の場合は、フィールドを複数の後続のフィールド区切り文字に分割する次のツールを使用することをお勧めします。awk '{print $2}' < input