2つの異なる拡張子で終わる2つのファイルのリストがあり、ループからペアにリンクしたいと思います。ファイル名は次のとおりです。
これらはファイルです。
a.ID, b.ID, c.ID, d.ID
a.value, b.value, c.value, d.value
直感的に私はそうします:
for i in *.ID;
do
for j in *.value;
do
cat $i $j > $i.txt ; done
done
問題は、私がa.ID
とマージしてa.value
ランダムにマージしたいということです。などのように.. b.ID
b.value
a.value
b.ID
どんなアイデアがありますか?事前にありがとう
入力サンプルa.ID
(例):
chr1_237301_237601 176 1
chr1_237601_237901 176 1
chr1_237901_238201 176 1
例はa.value
次で終わります。
chr1_1_301 0 0
chr1_301_601 0 0
chr1_601_901 0 0
chr1_901_1201 0 0
chr1_1201_1501 0 0
出力:
chr1_237301_237601 176 1
chr1_237601_237901 176 1
chr1_237901_238201 176 1
chr1_1_301 0 0
chr1_301_601 0 0
chr1_601_901 0 0
chr1_901_1201 0 0
chr1_1201_1501 0 0
答え1
2つのループは必要ありません。ループ、スルーなどがa
必要です。このように:b
c
for i in *.ID; do
b=${i%%.ID}
cat "$i" "$b".value >"$b".txt
done
答え2
これができるので、ここにfind
+bash
メソッドがあります。
$ ls
a.ID a.value
$ find -type f -iname "*.ID" -exec bash -c 'base=$(basename -s ".ID" "$@");cat "$@" "$base".value > "$base".merged' sh "{}" \;
$ ls
a.ID a.merged a.value
$ cat a.merged
chr1_237301_237601 176 1
chr1_237601_237901 176 1
chr1_237901_238201 176 1
chr1_1_301 0 0
chr1_301_601 0 0
chr1_601_901 0 0