Bash 按列打印文件数据内容

Bash 按列打印文件数据内容,bash,ubuntu,awk,Bash,Ubuntu,Awk,我有一个选项卡分隔的file.txt文件,其内容如下: word11 word12 word13 word14 word21 word22 word23 word24 word31 word32 word33 word34 word41 word42 word43 word44 我想将每一列复制到不同的文件中。例如: 第一个文件将包含: word11 word21 word31 word41 第二个文件将包含: word12 word22 word32 word42 我写了同样的脚本,共有

我有一个选项卡分隔的file.txt文件,其内容如下:

word11 word12 word13 word14
word21 word22 word23 word24
word31 word32 word33 word34
word41 word42 word43 word44
我想将每一列复制到不同的文件中。例如: 第一个文件将包含:

word11
word21
word31
word41
第二个文件将包含:

word12
word22
word32
word42
我写了同样的脚本,共有12列:

for i in {1..12}
do
        awk -F "\t" '{print $i}' file.txt > /tmp/output-$i.txt
done
但所有输出文件都包含所有数据:

word11 word12 word13 word14
word21 word22 word23 word24
word31 word32 word33 word34
word41 word42 word43 word44

谢谢您的帮助。

您试图在Awk中使用shell变量,但这是行不通的。但是你想做的事情完全可以在Awk中完成。到NF的for循环将解析所有列,您不再需要硬编码

awk -v FS="\t" '{for (i=1;i<=NF;i++) print $i > ("/tmp/output-"i);}'  file.txt

您正试图在Awk中使用shell变量,但这是行不通的。但是你想做的事情完全可以在Awk中完成。到NF的for循环将解析所有列,您不再需要硬编码

awk -v FS="\t" '{for (i=1;i<=NF;i++) print $i > ("/tmp/output-"i);}'  file.txt

你可以用cut来代替

for i in {1..12}
do
    cut -f$i file.txt > /tmp/output-$i.txt;
done

你可以用cut来代替

for i in {1..12}
do
    cut -f$i file.txt > /tmp/output-$i.txt;
done

您可以使用cutAwk,因为它不知道shell变量$i,所以它的计算结果为空,因此您的print语句就是print,它将打印整行。请看这里:您可以使用cutAwk,因为它不知道shell变量$i,所以它的计算结果为空,因此您的print语句就是print,它将打印整行。看这里:永远不要说永远:$因为我在{1..4};执行awk{print\$$i}file.txt>output-$i;完成@詹姆斯布朗:是的,但我从不推荐对Awk使用双引号;永远不要说永不:$因为我在{1..4};执行awk{print\$$i}file.txt>output-$i;完成@詹姆斯布朗:是的,但我从不推荐对Awk使用双引号;