ファイルの2つの列を交互にマージする方法は?

ファイルの2つの列を交互にマージする方法は?

ファイルの2つの列を交互にマージする方法は?以下の例をご覧ください。

入力ファイル:

sam    jam
tommy  bond

予想出力:

sam
jam
tommy
bond

答え1

簡単にawk:

awk '{ print $1 ORS $2 }' file
  • $1および$2- はそれぞれ最初と 2 番目のフィールドです。
  • ORS- 出力レコード区切り記号。初期値はORS文字列 " \n"(たとえば、改行文字)です。

出力:

sam
jam
tommy
bond

答え2

いくつかの選択肢:

awkを使う:

$ awk '$1=$1' OFS="\n" file1
sam
jam
tommy
bond

このソリューションは、1行あたりのフィールド数に関係なく機能します。

$ cat file2
one two three
four five
six seven eight nine

$ awk '$1=$1' OFS="\n" file2
one
two
three
four
five
six
seven
eight
nine

OFS出力フィールドの区切り記号。
$1=$1OFSを使用して、awkが各レコードを「再計算」するように強制します($ 0)。

楽しみのために、以下は、1行に必要な数のフィールドで動作するsedの代替案です。

$ sed -r 's/[ ]+/\n/g' file2

答え3

~/z1 のデータの場合、このコマンドは次のようになります。

xargs -n1 < ~/z1

生産する:

sam
jam
tommy
bond

そのようなシステムでは:

OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64
Distribution        : Debian 8.9 (jessie) 
bash GNU bash 4.3.30
xargs (GNU findutils) 4.4.2

そして:

OS, ker|rel, machine: SunOS, 5.11, i86pc
Distribution        : Solaris 11.3 X86
bash GNU bash 4.1.17
xargs - ( /usr/bin/xargs, 2016-04-10 )

これパラメータこのコマンドは、STDINから一度に最大n個(この場合は1)までタグを取得し、そのタグをコマンドの引数として提供します。エコ

頑張って...乾杯、drl

答え4

echo `paste -s file` | tr ' ' '\n'

または

paste -s file | fmt -1

または

cat file | xargs -n1

awk特別な場合、または同じプログラミングコマンドを使用する必要はありませんsed。上記の簡単なコマンドで十分です。

関連情報