ファイルをループして水平方向に結合する


4

私は次のことをしようとしています:

  1. ファイルのリストをループします
  2. 各ファイルを編集し、「トリミングされた」ファイルを出力します
  3. トリミングされた各ファイルを順番に作成済みのマスターファイルに水平方向に結合します

ステップ1と2が機能していますが、3が機能しません。

マスターファイル:

Col1   Col2
A       1
B       1
C       2

ファイルS1のトリミングファイル:

S1.Col3    S1.Col4
0            1
1            1
1            1

S1とS2がMASTERに参加した後の出力I

Col1   Col2   S1.Col3   S1.Col4   S2.Col3   S2.Col4
A       1       0         1          0        1
B       1       1         1          1        0
C       2       1         1          0        0

各ループの後、次のようなものを実行しようとしました:

paste MASTER.txt S1.txt > MASTER.txt

ただし、上記の代わりに、最後のSファイルのデータのみを含むファイルを取得します。出力せずにループの外でこれを実行しようとしましたが、すべて正常に動作します。答えてくれてありがとう。

完了のために、forループの内訳を非常に簡単に示します。

for FILE in FILELIST
do
    cut -f4,6 $FILE > ${FILE}_trimmed.txt
    paste MASTER.txt ${FILE}_trimmed.txt > MASTER.txt
done

ヒント:> MASTER.txtファイルのpaste内容を取得する前にファイルを上書きします。
iruvar

あなたの言っていることがわかりました。最初に試しましたpaste MASTER.txt ${FILE}_trimmed.txt > MASTER2.txtが、ファイルをループしている場合は明らかに動作しません。最終的にMASTERに結合された最終的なSファイルになります。だから、私が探している結果をどのように得るかはまだ不明です。私はRでの作業に慣れていて、一時変数として保存し、最後にファイルを出力することができました。わからないことは、ここではもっともらしいですか...これを行うには良い方法あれば
ガイウスアウグストゥス

1
単純に変更paste MASTER.txt ${FILE}_trimmed.txt > MASTER.txtしますpaste MASTER.txt ${FILE}_trimmed.txt > MASTER2.txt && mv MASTER2.txt MASTER.txt
iruvar

そうですか。それは最高です。回答を作成しましたが、より徹底的に説明したい場合は削除します。
ガイウスアウグストゥス

同様に問題はありません、1
iruvar

回答:


2

コメントでこれに答えてくれた1_CRに感謝します。

> MASTER.txtペーストは、実際に水平に参加完了する前にファイルを切り捨てています。答えは、一時ファイル(たとえば、MASTER2.txt)に出力し、(mvコマンドを使用して)適切なファイル名に名前を変更することです。

私の古いコード:

paste MASTER.txt ${FILE}_trimmed.txt > MASTER.txt

修正コード:

paste MASTER.txt ${FILE}_trimmed.txt > MASTER2.txt && mv MASTER2.txt MASTER.txt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.