ターミナルで特定の列を貼り付ける方法

ターミナルで特定の列を貼り付ける方法

ターミナル内から 3 列目のデータのみを貼り付けたいと思います。

もともと次のようなものがありました:

4 SF0086 SF0086
12 SF0087 SF0087
17 TSF141 TSF141
29 TSF070 TSF070
30 TSF028 TSF028   
31 TSF122 TSF122

これをコピーしてターミナルに貼り付けると、1行になります

4 SF0086 SF0086 12 SF0087 SF0087 17 TSF141 TSF141 29 TSF070 TSF070 30 TSF028 TSF028 31 TSF122 TSF122

次のようにしたいです:

SF0086
SF0087
TSF141
TSF070
TSF028
TSF122

その時点で 1 行 (中央) のオプションをファイルとして保存し、やなどを使用するかawk、一般的な POSIX システムで使用可能なオプションを使用できますが、まだ理解していません。 コマンドもうまくいかず、私にはできないという結論に達しています。 3 番目の列を抽出する必要があるたびに、データが変更されます (つまり、間隔が変わります)。 データ抽出/フォーマットの達人はいますか?sedperlpastepaste

答え1

'cut' はあなたが探しているコマンドです。使用する区切り文字 (空白がデフォルトだと思います) と必要な列を指定します。man ページにすべての詳細が記載されています。

正しく動作させるには、改行がそのままの状態で貼り付けられていることを確認する必要があります。

答え2

重複が常に存在し、番号付け (-f フィールド) は常に変更され、リストが数百のフィールド長になる可能性があるという事実から、私にとって最も効果的だった方法はcut有効なオプションではないことが判明しました。

これが私が望んでいたものを生み出しました:

sed -e 's/\s\+/\n/g' data.txt > data_cr.txt && sort data_cr.txt | uniq -d > final.txt

どこ:

sed -e 's/\s\+/\n/g' data.txt > data_cr.txt

スペースで区切られたすべてのテキストを独自の行に強制し、新しいファイルdata_cr.txtに書き込みます...そして

sort data_cr.txt | uniq -d > final.txt

行ごとにデータを取得し、重複する部分については 1 つのコピーのみを出力します。

関連情報