あなたが質問にコメントするとき、それawk
は本当に行く方法です。kevの答えが示すように、スペースを圧搾するcut
ことと一緒に使用することが可能です。tr -s
ただし、将来の読者のために考えられるすべての組み合わせについて説明します。説明はテストセクションにあります。
tr | 切る
tr -s ' ' < file | cut -d' ' -f4
awk
awk '{print $4}' file
バッシュ
while read -r _ _ _ myfield _
do
echo "forth field: $myfield"
done < file
sed
sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' file
テスト
このファイルを前提として、コマンドをテストしてみましょう。
$ cat a
this is line 1 more text
this is line 2 more text
this is line 3 more text
this is line 4 more text
tr | 切る
$ cut -d' ' -f4 a
is
# it does not show what we want!
$ tr -s ' ' < a | cut -d' ' -f4
1
2 # this makes it!
3
4
$
awk
$ awk '{print $4}' a
1
2
3
4
バッシュ
これにより、フィールドが順番に読み込まれます。を使用_
することにより、これはこれらのフィールドを無視する「ジャンク変数」としての使い捨て変数であることを示します。このようにして、$myfield
フィールド間のスペースに関係なく、ファイルの4番目のフィールドとして保存します。
$ while read -r _ _ _ a _; do echo "4th field: $a"; done < a
4th field: 1
4th field: 2
4th field: 3
4th field: 4
sed
これは、スペースの3つのグループをキャッチし、のスペースはキャッチしません([^ ]*[ ]*){3}
。次に、4番目のフィールドとしてスペースまで来るすべてのものをキャッチし、最終的にで出力され\1
ます。
$ sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' a
1
2
3
4