回答:
パイプを使用して、データ(例:cat columns.txt)をカットに送信します。
cat columns.txt | cut -d" " -f5
指定したサンプルデータでは、単一のスペース区切り文字が必要なデータをフィールド5に配置します。その出力を別のファイルに送信するには、リダイレクトを使用します。
cat collumns.txt | cut -d" " -f5 > field2.txt
awkコマンドを使用すると、データがあるため(?)awkについて詳しく知る必要があるため、次のようなフィールドを自動的に認識します。
awk -F' ' '{print $2}' columns.txt
grep -Po '^[^ ]+[ ]+\K[^ ]+' file
上記の1つは、以下のようなシェルスクリプト内で「root」ユーザーに変更する場合に、データ抽出用のawkなどのLinuxユーティリティが機能しない場合に非常に役立ちます。
sudo -i <<EOF
ps aux | grep -E -i "[l]js" |grep -v "javaagent" | awk '{print $2}' # So awk won't work here
ps aux | grep -E -i "[l]js" | grep -v "javaagent" | grep -Po '^[^ ]+[ ]+\K[^ ]+'
EOF
awk
例で「動作しない」唯一の理由は、ヒアドキュメントが引用符で囲まれてい$2
ないことです。つまり、シェルによって2番目の位置パラメータに展開されます。解決策はおそらくgrep
コマンドに切り替えるのではなく、$
in $2
asをエスケープするか、の代わりに\$2
を使用<<'EOF'
してドキュメント全体を単に引用することです<<EOF
。また、この例のタスクはにより簡単に実行されることに注意してくださいpgrep
。
cat ... |
が必要になることはめったにありません。のようなほとんどのUnixコマンドはcut
、1つ以上の入力ファイルを引数として取りますcut -d" " -f5 columns.txt
。