2つの列を1つにマージしようとしています。私のデータセットは次のとおりです。
RSID1 RSID2
rs7475652 rs7475652
rs7475652 rs7918643
rs7475652 rs3125034
rs7475652 rs3750730
rs7475652 rs883728
rs7475652 rs4881500
rs7475652 rs3853288
rs7475652 rs4881504
rs7475652 rs2242271
rs7475652 rs7099607
rs7475652 rs10904597
rs7475652 rs3207775
ご覧のように、いくつかの重複した値があります。まず、列2を列1とマージしてから、コマンドを使用してuniq
重複項目を削除する予定です。これら2つの列をマージしてから、重複した列を削除したいと思います。
以下は、この例で予想される出力の最初の部分です。
rs7475652
rs7475652
rs7475652
rs7918643
rs7475652
rs3125034
rs7475652
rs3750730
rs7475652
rs883728
答え1
この質問を推測するとは、目的の出力が次のようになることを意味します。
RSID1
RSID2
rs7475652
rs7475652
rs7475652
rs7918643
rs7475652
rs3125034
rs7475652
rs3750730
rs7475652
rs883728
rs7475652
rs4881500
rs7475652
rs3853288
rs7475652
rs4881504
rs7475652
rs2242271
rs7475652
rs7099607
rs7475652
rs10904597
rs7475652
rs3207775
それから
awk '{print $1 "\n" $2}'
そうするでしょう。 awk は、OP が実行しようとしている次のステップを処理して、出力を一意にすることもできます。これを実行するコードは、出力がペアごとに一意である必要があるか(各行が前の行とは異なる)か、グローバルに一意であるべきか(各行がすべての前の行と異なる)によって異なります。
答え2
@icarusをawk
実際に変更すると、
\n
次のような他のツールを使用して同じ目標を達成できます。
cat file | tr ' ' '\n' # Naughty me! See UUOC below.
または
sed "s/ /\n/g" file
これは、スペースで区切られた2つ以上の要素行を単一の「列」に減らすか、より正確には各要素を独自の行に配置します。
コメントで指摘した追加スペースについては...
sed "s/ /\n/g" file | tr -d ' '
追加の複雑さを導入すると、すべてがawk
より魅力的になりますが、この場合、次の方法も可能です。
grep -Po "[^ ]+" file
この素晴らしい賞を与えてくれた@edmortonとチーム、そしてこれらすべてを可能にした私の友人や同僚に感謝の気持ちを伝えたいです。私の子犬、スポットなども忘れないでください。それは私のZX-80と1980年から流しに優雅に積み重ねられていた中古スプーンの隣に誇りを持っています。
@edmortonコメントの下で宣伝されました
tr ' ' '\n' < file
答え3
ファイル名がa.txtで区切り記号が\ tであることを考慮すると、次のコマンドを使用できます。
cat a.txt | awk -F"\t" '{print $1 "\n" $2}' > b.txt
b.txt に期待される出力が含まれます。