新しいファイルを書き込まずに2つのファイルを「貼り付ける」方法は? [閉鎖]

新しいファイルを書き込まずに2つのファイルを「貼り付ける」方法は? [閉鎖]

私はこれをやっています

for pathname in /user/home/file_*; do
    cat "$pathname" | sed -n '3p'; printf"\n";
done> user/home/foo;

for pathname in /user/home/file_*; do
    cat "$pathname" | grep "word";
    printf"\n";
done> user/home/bar;

paste foo bar > combined

&をcombined書かずに直接書く方法は何ですか?ディレクトリが大きいので、実行時間を短くしてください。foobar

頑張った

for pathname in /user/home/file_*; do
    cat "$pathname" | sed -n '3p'; printf"\n";
done | paste > combined;

for pathname in /user/home/file_*; do
    cat "$pathname" | grep "word";
    printf"\n";
done | paste > combined;

しかし、最初のリストは上書きされます。

ベストアンサー1

申し訳ありません。質問を誤解した可能性があります。一緒にいるかもしれない https://stackoverflow.com/questions/31546680/how-to-pipe-grep-output-to-paste-input

Pasteコマンドは、ストリームの代わりに2つ以上のファイルを使用して列構造を維持し、結合ファイルの左から右に配置します。左から右に列を結合するには、次のリンクが興味深いことがあります。 https://www.geeksforgeeks.org/paste-command-in-linux-with-examples/ 「2.他のコマンドとの組み合わせ」では、「カット」との組み合わせについて説明します。 file1にタブで区切られた2つの列がある場合、file2には1つの列があり、連続切り取りと貼り付けパイプラインを実行できます。

cut -d\      -f1-2 file1 | paste - file2 | cut -d\   -f1-3 | paste - file3

ここで、-d\ の後の見えない文字はタブ文字です (コマンドラインの ctl-V タブ、実際にはタブは「貼り付け」と同様に「切り取り」のデフォルトの区切り文字である可能性があります)。それぞれ「貼り付け」の後ろのハイフンは、パイプ入力ストリームの列位置。

または、すべての列が保存されるため、次のようになります。

cut -d\      -f1-2 file1 | paste - file2 | paste - file3

2番目のファイルのすべての出力を最初のファイルの出力の下に置くには、サブシェルを使用するという元の提案があります。

( source cmdLIST1.csh ; source cmdLIST2.csh ) > combinedOUTPUT.txt

役に立つかもしれません。

Chaiの答えは「bash」と「zsh」では動作しますが、「tcsh」では動作しないように見え、おそらく最も簡単です。

おすすめ記事