ファイルの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=$1
OFSを使用して、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
。上記の簡単なコマンドで十分です。