
私のテキストファイルには区切り文字を指定する区切り文字がなく、空白のみがあります。出力ファイルから列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