逐列打印文件数据内容

问题描述 投票:1回答:2

我有一个标签分隔文件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

谢谢您的帮助。

bash ubuntu awk
2个回答
5
投票

您正尝试在Awk中使用shell变量,这些变量永远不会起作用。但是你要做的事情完全可以在Awk本身完成。 NF的for循环将解析你的所有列,你不需要再对其进行硬编码。

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

3
投票

你可以改用切割

for i in {1..12}
do
    cut -f$i file.txt > /tmp/output-$i.txt;
done
© www.soinside.com 2019 - 2024. All rights reserved.