删除AIX

时间:2017-10-06 07:15:25

标签: unix awk sed aix

早上好。长时间的读者,第一次发送电子邮件,所以请温柔。

我正在使用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条记录。

提前致谢。

1 个答案:

答案 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以惯用的方式打印输入记录(包括所做的任何修改)

34更改为您需要的任何字段


如果第一行不应受影响,请添加条件

awk 'BEGIN{FS=OFS="|"} NR>1{gsub(" ","",$3); gsub(" ","",$4)} 1' ip.txt