早上好。长时间的读者,第一次发送电子邮件,所以请温柔。
我正在使用AIX 5.3并且有一个42列管道分隔文件。第15栏和第15栏中有电话号码。 16(移动)根据谁键入数据可能包含或不包含空格。
我需要从第15列和第15列删除这些空间。 16只是
Column 15 | Column 16 **Currently**
01942 665432|07865346122
01942756423 |07855 333567
Column 15 | Column 16 **Needs to be**
01942665432|07865346122
01942756423|07855333567
我有一个快速&不幸的是,脏脚本被证明是快速的,因为它是一个读取每一行的while循环,切割管道分隔符上的字段,将其分配给变量,使用第15列和第15列的sed。 16只剥离空格然后将其写入新文件,即
cat $file | while read
output
do
.....
fourteen=$( echo $output | cut -d'|' -f14 )
fifteen=$( echo $output | cut -d'|' -f15 | sed 's/ //g' )
echo ".....$fourteen|$fifteen..." > $new_file
done
我知道必须有更好的方法来做到这一点,可能是使用AWK,但我愿意接受任何人可以提供的任何建议,因为现在的脚本需要半小时加上处理176,000条记录。
提前致谢。
答案 0 :(得分:0)
是的,awk
更适合
$ cat ip.txt
a|foo bar|01942 665432|07865346122|123
b|i j k |01942756423 |07855 333567|90870
$ awk 'BEGIN{FS=OFS="|"} {gsub(" ","",$3); gsub(" ","",$4)} 1' ip.txt
a|foo bar|01942665432|07865346122|123
b|i j k |01942756423|07855333567|90870
BEGIN{FS=OFS="|"}
设置|
作为输入和输出字段分隔符gsub(" ","",$3)
将所有空格替换为第3列gsub(" ","",$4)
将所有空格替换为第4列1
以惯用的方式打印输入记录(包括所做的任何修改)将3
和4
更改为您需要的任何字段
如果第一行不应受影响,请添加条件
awk 'BEGIN{FS=OFS="|"} NR>1{gsub(" ","",$3); gsub(" ","",$4)} 1' ip.txt