【发布时间】:2015-03-24 18:56:29
【问题描述】:
我在 awk 中使用我的 shell 脚本 TR 命令来屏蔽数据。当我在 awk 中使用 tr 命令时,下面的示例文件仅影响我的文件的第一行。当我在 while 循环中使用相同的并在其中调用 awk 命令时,它工作正常,但需要很长时间才能完成。现在我的要求是我想在同一个文件(file.txt)中屏蔽许多列[例如:$1、$5、$9],这应该影响整个文件而不是第一行,我想尽可能快地实现这一点来屏蔽数据。请指教
猫文件.txt
========
abcbchs,degehek
abcbchs,degehek
abcbchs,degehek
abcbchs,degehek
abcbchs,degehek
abcbchs,degehek,lskjsjshsh
abcbchs,degehek
abcbchs,degehek,lskjsjsshsh
输出
awk -F"," -v OFS="," '{ "echo \""$1"\" | tr \"a-c\" \"e-f\" | tr \"0-5\" \"6-9\"" | getline $1 }7' file.txt
effffhs,degehek
abcbchs,degehek
abcbchs,degehek
abcbchs,degehek
abcbchs,degehek
abcbchs,degehek,lskjsjshsh
abcbchs,degehek
abcbchs,degehek,lskjsjsshsh
预期输出
effffhs,degehek
effffhs,degehek
effffhs,degehek
effffhs,degehek
effffhs,degehek
effffhs,degehek,lskjsjsshsh
effffhs,degehek
effffhs,degehek,lskjsjsshsh
【问题讨论】:
-
您正试图在 awk 中运行 bash 代码,但 awk 是一种与 bash 完全不同的语言。如果您想在每一行上运行 bash 代码,请改用 while read loop。
-
它看起来有点像您从here 复制/粘贴代码,但这确实不是一种惯用或常用的方法。
-
@thatotherguy .. while 循环读取文件的整行,我尝试了它的工作正常和预期的结果,但时间因素是问题..我用于用不同的分隔符屏蔽不同类型文件中的数据,列也因文件而异,我希望使用 awk 是最好的方法......如果我们在 awk 命令行中执行以获得预期的结果。然后我会调用我的 ksh shell 脚本..