为什么`awk`打印for循环的所有元素,但不能将它们全部导出到剪贴板?

时间:2016-01-26 22:58:23

标签: bash awk clipboard

给出一些像这样的数据:

"Something something","1234567890123456","12/34/5678","Other thing","123",""

我尝试让awk打印字段,然后使用X将其导出到xclip剪贴板,其中包含以下内容:

echo $data | sed 's/"//g' | awk -F',' '{for(i=1;i<NF;i++) {print $i; system("echo \"" $i "\" | xclip -i")}}'

正确地给出正确的输出:

Something something
1234567890123456
12/34/5678
Other thing
123

但它似乎只将最后一个字段复制到剪贴板。我正在使用剪贴板管理器(klipper),所以我希望列出所有字段。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

如果您尝试使用每个值之间的换行符将字段复制到剪贴板,请考虑以下事项:

awk -F',' '
  { s=$1; for (i=2;i<NF;i++) {s=s "\n"$i; }
    print s;
    system("echo \"" s "\" | xcopy -i");
  }'

答案 1 :(得分:0)

这根本不是awk问题。显然,xclip无法处理其接收输入的速度。同样,for i in {1..3}; do echo $i | xclip -i; done以同样的方式失败。在调用sleep后添加xclip将解决问题。根据我的实验,每个项目需要0.1秒,因此对于显示的6个字段,您需要:

echo $data | sed 's/"//g' | awk -F',' '{for(i=1;i<NF;i++) {print $i; system("echo \"" $i "\" | xclip -i; sleep 0.6")}}'