複数のファイル(〜15個)があり、各ファイルには複数のデータ列(タブ区切り)があります。たとえば、
ファイル1
aa1 399 1815
aa2 1908 4064
aa3 4523 5656
ファイル2
bb1 5304317 5305057
bb2 5305057 5305824
bb3 5306871 5307875
など。
各ファイルの2番目の列を読み、並べて印刷して15列の出力を作成したいと思います。たとえば、
出力
399 5304317 7526 12455
1908 5305057 8195 14538
4523 5306871 9216 15150
各列は異なるファイルにあります。最初の列に注意してください出力2列目ですファイル12番目の列出力2列目ですファイル2。
ペーストを使ってみました。ただし、各入力ファイルのすべてのデータを配置します。これはどのように達成できますか?
答え1
それぞれ3つの列を持つ3つのファイルに対して、次のように使用できます。
pr -m -t -s file1 file2 file3|awk '{printf("%s\t%s\t%s\n",$2,$5,$8)}'
ファイル数とファイルあたりのフィールド数を数えることでラップすることもできますが、これは始点です。
答え2
よかったらこんな感じでもいい
for file in $(ls File*); do
awk '{print $2}' < $file > $file.col2
done
pr -m -s *.col2 > merged.txt
rm -f *.col2
答え3
たぶんpaste
うまくいくと思いますか?
$ paste <(cut -f2 file1) <(cut -f2 file2) <(cut -f2 file3) <(cut -f2 file4)
399 5304317 7526 12455
1908 5305057 8192 14538
4523 5306871 9216 15150
$