来自文本文件
文件
a d b e c f
如何将制表符分隔的列连接成一列
a b c d e f
现在我使用 awk 将列输出到两个文件,然后使用 cat 连接。但是必须有一个更好的一行命令?
答案 0 :(得分:2)
用于通用方法
$ f() { awk '{print $'$1'}' file; }; f 1; f 2
a
b
c
d
e
f
如果文件以制表符分隔,可能仅使用cut
(paste
的反向操作)
$ 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)
答案 6 :(得分:-1)
另一种方法:
for i in $(seq 1 2); do
awk '{print $'$i'}' file
done
输出:
a
b
c
d
e
f