切り取りと貼り付けシェルコマンドを使用してテーブルのx軸とy軸を置き換える方法

切り取りと貼り付けシェルコマンドを使用してテーブルのx軸とy軸を置き換える方法

450.000×15.000タブで区切られたフィールドファイルのx軸とy軸を転置する必要があるため、まずA.txtという小さな5×4テストファイルを試しました。

x   column1 column2 column3

row1    0   1   2

row2    3   4   5

row3    6   7   8

row4    9   10  11

私はこれを試しました:

for i in {1..4}; do cut -f"$i" A.txt | paste -s; done > At.txt

しかし、正しく動作しません。

出力は次のとおりです

X   row1    row2    row3    row4
column1 0   3   6   9
column2 1   4   7   10
column3
    2
    5
    8
    11

ベストアンサー1

入力がタブ区切りのフィールドを持つUnixテキストファイルであり、pasteGNUを使用すると仮定すると、コマンドは正常に機能します。 GNU以外のシステムでは、次のものを使用する必要があります。

$ for i in {1..4}; do cut -f"$i" A.txt | paste -s - ; done
x       row1    row2    row3    row4
column1 0       3       6       9
column2 1       4       7       10
column3 2       5       8       11

-標準入力から読み取るように指示する引数に注意してください。paste

君は必ずこうするんだいいえファイルを450,000回読み取る必要があるため、450,000列で実行しようとしています。他のソリューションを使用することをお勧めします。

たとえば、行と列を置き換える」。


上記のコマンドをDOSテキストファイルで実行すると、端末に次のような出力が生成されます。

x       row1    row2    row3    row4
column1 0       3       6       9
column2 1       4       7       10
        11

出力を新しいファイルにリダイレクトし、vimエディタでファイルを開くと、次のようになります。

x   row1    row2    row3    row4
column1 0   3   6   9
column2 1   4   7   10
column3^M   2^M 5^M 8^M 11^M

これらのそれぞれは、^Mキャリッジリターン文字(DOSテキスト行の末尾にある追加の文字)です。これらのキャリッジリターンはカーソルを行の先頭に戻すので、端末の最後の行に表示される唯一の項目はタブ文字と11(他の列を上書きする)ことです。

を実行して、入力ファイルがUnixテキストファイルであることを確認してくださいdos2unix A.txt

おすすめ記事