2017-12-06 11 views
0

結合コマンド出力の各フィールドをタブで区切るにはどうすればよいですか?ファイルをbash(スクリプト)でソートして結合する

+2

'X || 「Y」は「Xが失敗した場合のみ実行する」ことを意味する。確かにそれはあなたが望むものではありませんか? –

+3

ファイル 'x'を適切にソートしたい場合は、' sort -o x x'を使います。これは安全であり、ソートされたデータが書き込まれるまで入力ファイルを壊さない。次に、 'sort -o annotation.txt annotation.txt;を使用します。 sort -o output2.txt output2.txt; output2.txt annotation.txt> outputtest.txt'を結合します。エラーメッセージがあり、本当に出力ファイルに入れたい場合は、 '>'の代わりに '&>'を使います。ファイルを永続的に並べ替える必要がない場合は、Charles Duffyの提案に従って[プロセス置換](https://www.gnu.org/software/bash/manual/bash.html#Process-Substitution)を使用してください。 –

+0

nop haha​​私はXとYを意味し、それらの両方をZのために使用します –

答えて

3

これは、プロセス置換の仕事です:

この用法で
join <(sort annotation) <(sort output2.txt) >outputtest.txt 

<(sort annotation)はファイルライクオブジェクト(/dev/fd/10 - 体のいずれかまたは名前付きパイプ)に置き換えされる、から読んだとき、コマンドsort annotationの出力が含まれています。したがって、joinは、ファイルをインプレースで修正する必要なくソートされた入力を表示します(元のコードは実際には行っていません)。

+0

ありがとうございます!私は質問がありますが、両方のファイルで同じ場合は最初の列をマージしますか?また、タブを使用して出力を表示するように指示するかどうか、または後で別のコマンドを使用する必要がありますか? –

+0

私は入力フォーマットとユースケースについてもっと知りたいと思うでしょう。入力と出力の両方にタブを使うように指定するには、 'join $ 'の引数として' -t $' \ t''を使うことができます。最初の列をマージフィールドとして指定する場合、 '-j 1'はそれを明示的にします。 –

+0

大丈夫私の投稿を編集します!しかし、マージについては、私は特にファイルの最初の列をマージしたいとは思っていませんが、私が与えたコマンドラインを試したときに、最初のカラムをマージしました(どちらのファイルでもbtwは同じです) –

関連する問題