フォーマットされたプロセスのリスト (上部の出力) があり、不要な情報を削除したいと考えています。たとえば、各行の 2 番目の単語 + 空白を削除するにはどうすればよいですか。
例:
1 a hello
2 b hi
3 c ahoi
abとcを削除したいです。
コマンドを使用できますcut。
cut -d' ' -f2 --complement file
--complement逆を行います。つまり、-f22 番目のフィールドが選択されました。そして、--complementif は 2 番目を除くすべてのフィールドを出力します。これは、可変数のフィールドがある場合に便利です。
GNU のカットにはオプションがあります--complement。--complementが利用できない場合は、次のようにして同じことを行います。
カット -d'' -f1,3- ファイル
意味: 最初のフィールドを印刷してから、3 番目から最後まで印刷します。つまり、2 番目のフィールドを除外して、残りを印刷します。 編集:
必要に応じて、次のawkことができます。awk {$2=""; print $0}' file
これにより、秒が空に設定され、行全体が (1 つずつ) 出力されます。
を使用sedして 2 番目の列を置き換えます。
sed -r 's/(\w+\s+)\w+\s+(.*)/\1\2/' file
1 hello
2 hi
3 ahoi
説明:
(\w+\s+) # Capture the first word and trailing whitespace
\w+\s+ # Match the second word and trailing whitespace
(.*) # Capture everything else on the line
\1\2 # Replace with the captured groups
注: オプションを使用して結果をに-i保存します。これは拡張正規表現用です。実装によってはを確認してください。file-rman-E
またはawk、指定された列のみを印刷するために使用します。
$ awk '{print $1, $3}' file
1 hello
2 hi
3 ahoi
どちらのソリューションにもメリットがあります。awkソリューションは少数の固定数の列には適していますが、一時ファイルを使用して変更を保存する必要があります。これは、列が問題ではなく、オプションが編集を行うためawk '{print $1, $3}' file > tmp; mv tmp file、sedソリューションがより柔軟であるためです。-i場所。
これはうまくいくかもしれません(GNU sed):
sed -r 's/\S+\s+//2' file
バッシュの使用:
$ while read f1 f2 f3
> do
> echo $f1 $f3
> done < file
1 hello
2 hi
3 ahoi
を使用した片道sed:
sed 's/ [^ ]*//' file
結果:
1 hello
2 hi
3 ahoi