テキストファイルから列2を切り取ります。

テキストファイルから列2を切り取ります。

私のテキストファイルには区切り文字を指定する区切り文字がなく、空白のみがあります。出力ファイルから列2をどのように切り取ることができますか?

39    207  City and County of San Francisc   REJECTED          MAT = 0
78    412  Cases and materials on corporat   REJECTED          MAT = 0
82    431  The preparation of contracts an   REJECTED          MAT = 0

だから私が必要とする結果は

207
412
432

答え1

最も簡単な方法は、awk複数の連続したスペースを単一のスペースとして扱うことです。

awk '{print $2}' file

印刷

207
412
431

しかし、明らかにこれを行うことができる他のツールもあり、(GNU)のようにこの種のタスク用に設計されていないツールもありますgrep

grep -Po '^[^ ]+[ ]+\K[^ ]+' file

答え2

パイプを使用して追加のスペースを圧縮し、columns.txtデータ(たとえばin)を次に送信しますcut

tr -s ' ' < columns.txt | cut -d" " -f2

提供されたサンプルデータでは、単一のスペース区切り文字は必須データをフィールド5に配置します。ただし、最初の列が数値で右揃えのための先行スペースがある場合は、フィールド番号を調整する必要があります。スペースを圧縮するために最初のものを使用すると、tr -s ' 'この問題を処理することを回避できます。

出力を別のファイルに送信するには、リダイレクトを使用します。

tr -s ' ' < columns.txt | cut -d" " -f2 > field2.txt

awkコマンドを使用すると、次の操作を実行でき、データがあるため(?)現在存在するフィールドを自動的に識別します。 awkについてもっと知る必要があります。

awk -F' ' '{print $2}' columns.txt

答え3

すべてman cut

 -w      Use whitespace (spaces and tabs) as the delimiter.  Consecutive
         spaces and tabs count as one single field separator.

シェル:

% cat $$
39    207  City and County of San Francisc   REJECTED          MAT = 0
78    412  Cases and materials on corporat   REJECTED          MAT = 0
82    431  The preparation of contracts an   REJECTED          MAT = 0
% cut -w -f2 $$
207
412
431
%

答え4

使用真珠

perl -lane 'print $F[1];' 

使用幸せ(以前のPerl_6)

raku -ne 'put .words[1];' 

望むより:
https://unix.stackexchange.com/a/109894/227738
https://unix.stackexchange.com/a/555394/227738
https://unix.stackexchange.com/a/701811/227738

関連情報