我真的好奇:有没有任何工具可以帮助shell文本处理程序 - >将一列裁掉,提供给文本处理程序,然后将其粘贴回来。
例如,我有一个文件:
3f27,tom,17
6d44,jack,19
139a,jerry,7
我想要更改字段2,删除所有aeiou。
我知道有很多方法可以解决这个问题。但为什么我们不面对呢?
我想要一个工具,例如:
deal-only -d"," -f2 sed 's/[aeiou]//g'
这更干净,更强大。
那么,有人知道这样的工具或类似的解决方案吗? 如果不是,我想创建一个。
正如我上面所说,我知道sed
或awk
可以很好地处理上述问题。
但是当您遇到复杂问题时,sed
或awk
无法拯救您。
deal-only -d"," -f2 ./ip2country.rb
在这里,我想将第2列从ip修改为国家。
答案 0 :(得分:1)
使用awk
:
# script.awk
BEGIN { FS="," }
{print $1 "," gensub("[aeiou]+", "", "g", $2) "," $3}
然后:
awk -f script.awk < data.txt
答案 1 :(得分:0)
您可以使用bash
的协同处理功能(请参阅例如here):
#!/bin/bash
coproc stdbuf -oL sed 's/[aeiou]//g'
while IFS="," read a b c ; do
echo "${b}" >&${COPROC[1]}
read -u ${COPROC[0]} b2
echo "${a},${b2},${c}"
done
一些随机记录:
这不是POSIX
过滤列数据的过程的标准输出*必须是行缓冲/非缓冲的(这是stdbuf -oL
部分 - 请参阅上述文档中的“缓冲”部分)
(AFAIK)通过产生后台流程和i/o redirection
(AFAIK)链接到单个外部“资源密集型”流程输入/输出的两个命名管道也可以正常工作
我不是百分百确定这是否是最好的方法,但它对我有用