为什么 `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")}}'
给定一些这样的数据:
"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")}}'