ファイル名のリストをテキストファイルとして印刷しようとしていますが、特定のファイル名を同じ行に印刷する必要があります。たとえば、4つのファイルがあります。
Paleo_R1.fastq
Paleo_R2.fastq
Vegan_R1.fastq
Vegan_R2.fastq
私が望む出力は
Paleo_R1.fastq Paleo_R2.fastq
Vegan_R1.fastq Vegan_R2.fastq
ls関数を使用してテキストファイルに直接出力できることはわかっていますが、ls >> file.txt
特定の入力行項目を特定の出力行に印刷するオプションはありません。
また、次のforループが利用可能であることを知っています>
for file in Vegan*R1*.fastq;
do echo $file ${file%_R1.fastq}_R2.fastq >> file.txt;
done
しかし、各ファイル名に対して別々のコマンドを使用したくありません。ベジタリアンやパレオダイエットに適しています。
特定のラインを特定の出力ラインに印刷する方法はありますか(入力ライン1と2を出力ライン1に印刷し、入力ライン3と4を出力ライン2に印刷するなど...)
編集:このルールは、ファイル名ではなくすべてのN = 2ファイルに基づいています。
ベストアンサー1
おそらく
$ ls *.fastq | xargs -n2
Bar_R1.fastq Bar_R2.fastq
Bar_R3.fastq Foo_R1.fastq
Foo_R2.fastq Foo_R3.fastq
Paleo_R1.fastq Paleo_R2.fastq
Vegan_R1.fastq Vegan_R2.fastq
または熱出力の場合
$ ls *.fastq | xargs -n2 | column -t
Bar_R1.fastq Bar_R2.fastq
Bar_R3.fastq Foo_R1.fastq
Foo_R2.fastq Foo_R3.fastq
Paleo_R1.fastq Paleo_R2.fastq
Vegan_R1.fastq Vegan_R2.fastq
(>> file.txt
ファイルに出力を追加するには、コマンドに追加)
どちらの例も、空白のないファイル名でのみ機能します。
空白のあるファイルの場合:
$ for i in *.fastq; do echo -ne "$i\0"; done | xargs -0 -n2