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

why does `awk` print all elements of a for loop, but can't export them all to the clipboard?

给定一些这样的数据:

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

我正在尝试让 awk 打印字段,然后使用 xclip 将它们导出到 X 剪贴板:

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),所以我希望所有字段都列出来。

我错过了什么?

如果您尝试将字段复制到剪贴板并在每个值之间换行,请考虑以下情况:

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

这根本不是 awk 问题。显然,xclip 无法处理其接收输入的速度。同样,for i in {1..3}; do echo $i | xclip -i; done 以同样的方式失败。在调用 xclip 后添加一个 sleep 将解决问题。根据我的实验,每个项目需要 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")}}'