如何交替合并文件中的两列?

如何交替合并文件中的两列?

如何交替合并文件中的两列?请参见下面的示例。

输入文件:

sam    jam
tommy  bond

预期输出:

sam
jam
tommy
bond

答案1

简单地与awk:

awk '{ print $1 ORS $2 }' file
  • $1$2- 分别是第 1 和第 2 字段
  • ORS- 输出记录分隔符。的初始值为ORS字符串“ \n”(即换行符)

输出:

sam
jam
tommy
bond

答案2

一些替代方案:

使用 awk :

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

该解决方案适用于每行任意数量的字段:

$ 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强制 awk 使用 OFS“重新计算”每条记录 ($0)

只是为了好玩,下面有一个 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

对于您的特殊情况,无需打扰那些编程命令,例如awksed。上面的简单命令就足够了。

相关内容