来自同一文件的两列的连接

时间:2017-05-24 18:22:46

标签: bash shell awk

来自文本文件

  

文件

a    d
b    e
c    f

如何将制表符分隔的列连接成一列

a
b
c
d
e
f

现在我使用 awk 将列输出到两个文件,然后使用 cat 连接。但是必须有一个更好的一行命令?

7 个答案:

答案 0 :(得分:2)

用于通用方法

$ f() { awk '{print $'$1'}' file; }; f 1; f 2

a
b
c
d
e
f

如果文件以制表符分隔,可能仅使用cutpaste的反向操作)

$ cut -f1 file.t; cut -f2 file.t

答案 1 :(得分:0)

这个简单的awk命令可以完成这项任务:

awk '{print $1; s=s $2 ORS} END{printf "%s", s}' file
a
b
c
d
e
f

答案 2 :(得分:0)

您可以使用流程替换;这将消除为每列创建文件的需要。

$ cat file 
a    d
b    e
c    f
$ cat <(awk '{print $1}' file) <(awk '{print $2}' file)
a
b
c
d
e
f
$ 

OR

根据评论,您可以组合多个命令并将其输出重定向到不同的文件,如下所示:

$ cat file 
a    d
b    e
c    f
$ (awk '{print $1}' file; awk '{print $2}' file) > output
$ cat output 
a
b
c
d
e
f
$

答案 3 :(得分:0)

尝试:无需读取文件两次或没有任何其他命令的外部调用,只需单个awk即可进行救援。还要考虑你的Input_file与显示的样本相同。

awk '{VAL1=VAL1?VAL1 ORS $1:$1;VAL2=VAL2?VAL2 ORS $2:$2} END{print VAL1 ORS VAL2}'   Input_file

说明:只需创建一个名为VAL1的变量,该变量将包含$ 1的值并继续连接其自身的值,VAL2将具有$ 2的值并继续连接它自己的值。在awk的END部分中打印VAL1和VAL2的值。

答案 4 :(得分:0)

您可以将bash命令与;结合使用以获得单个流:

$ awk '{print $1}' file; awk '{print $2}' file
a
b
c
d
e
f

如果您希望将其视为单个文件,请使用流程替换:

$ txt=$(awk '{print $1}' file; awk '{print $2}' file)
$ echo "$txt"
a
b
c
d
e
f

或者对于Bash while循环:

$ while read -r line; do echo "line: $line"; done < <(awk '{print $1}' file; awk '{print $2}' file)
line: a
line: b
line: c
line: d
line: e
line: f

答案 5 :(得分:-1)

如果您使用的是notepadd ++,则可以使用newl enter image description here ine char替换所有制表符值“\ r \ n”

答案 6 :(得分:-1)

另一种方法:

for i in $(seq 1 2); do
    awk '{print $'$i'}' file
done

输出:

a
b
c
d
e
f