5

フォーマットされたプロセスのリスト (上部の出力) があり、不要な情報を削除したいと考えています。たとえば、各行の 2 番目の単語 + 空白を削除するにはどうすればよいですか。

例:

1 a hello
2 b hi
3 c ahoi

abとcを削除したいです。

4

5 に答える 5

10

コマンドを使用できます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 つずつ) 出力されます。

于 2012-12-06T10:31:40.830 に答える
5

を使用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 filesedソリューションがより柔軟であるためです。-i場所。

于 2012-12-06T10:29:54.207 に答える
3

これはうまくいくかもしれません(GNU sed):

sed -r 's/\S+\s+//2' file
于 2012-12-06T13:02:32.980 に答える
3

バッシュの使用:

$ while read f1 f2 f3
> do
>  echo $f1 $f3
> done < file
1 hello
2 hi
3 ahoi
于 2012-12-06T10:36:13.033 に答える
3

を使用した片道sed

sed 's/ [^ ]*//' file

結果:

1 hello
2 hi
3 ahoi
于 2012-12-06T10:34:17.367 に答える