逐列打印文件数据内容

时间:2017-12-28 11:52:04

标签: bash ubuntu awk

我有一个制表符分隔文件private static void sendEmail(Context context, File file) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"XXXXXXXXXX ENTER EMAIL"}); intent.putExtra(Intent.EXTRA_SUBJECT, "Log Report"); intent.putExtra(Intent.EXTRA_TEXT, "Add description:"); if (!file.exists() || !file.canRead()) { Toast.makeText(context, "Attachment Error", Toast.LENGTH_SHORT).show(); return; } Uri uri = Uri.parse("file://" + file); intent.putExtra(Intent.EXTRA_STREAM, uri); context.startActivity(Intent.createChooser(intent, "Send email...")); } ,其内容如下:

file.txt

我想将每个列复制到另一个文件中。例如: 第一个文件将包含:

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

第二个文件将包含:

word11
word21
word31
word41

我编写了相同的脚本(有12列):

word12
word22
word32
word42

但是所有输出文件都包含所有数据:

for i in {1..12}
do
        awk -F "\t" '{print $i}' file.txt > /tmp/output-$i.txt
done

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

您只需使用剪切

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