删除 AIX 中管道分隔文件中特定列中的空格
Removing blank spaces in specific column in pipe delimited file in AIX
早上好。好久 reader,第一次发邮件,所以请多多关照。
我正在使用 AIX 5.3,并且有一个 42 列竖线分隔文件。第 15 和 16 列(陆地|移动)中有电话号码,可能包含也可能不包含 space,具体取决于输入数据的人。
我只需要从第 15 列和第 16 列中删除这些 space 即
Column 15 | Column 16 **Currently**
01942 665432|07865346122
01942756423 |07855 333567
Column 15 | Column 16 **Needs to be**
01942665432|07865346122
01942756423|07855333567
我有一个快速而肮脏的脚本,不幸的是,它被证明一点也不快,因为它是一个 while 循环读取每一行,切割管道分隔符上的字段,将其分配给一个变量,在第 15 列上使用 sed & 16 仅去除空白 spaces 然后将其写入新文件即
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 条记录。
提前致谢。
是的,awk
更适合这里
$ cat ip.txt
a|foo bar|01942 665432|07865346122|123
b|i j k |01942756423 |07855 333567|90870
$ awk 'BEGIN{FS=OFS="|"} {gsub(" ","",); gsub(" ","",)} 1' ip.txt
a|foo bar|01942665432|07865346122|123
b|i j k |01942756423|07855333567|90870
BEGIN{FS=OFS="|"}
设置 |
作为输入和输出字段分隔符
gsub(" ","",)
仅将第 3 列的所有空格替换为空
gsub(" ","",)
仅将第 4 列的所有空格替换为空
1
打印输入记录的惯用方式(包括所做的任何修改)
将 3
和 4
更改为您需要的任何字段
如果第一行不受影响,添加一个条件
awk 'BEGIN{FS=OFS="|"} NR>1{gsub(" ","",); gsub(" ","",)} 1' ip.txt
早上好。好久 reader,第一次发邮件,所以请多多关照。
我正在使用 AIX 5.3,并且有一个 42 列竖线分隔文件。第 15 和 16 列(陆地|移动)中有电话号码,可能包含也可能不包含 space,具体取决于输入数据的人。
我只需要从第 15 列和第 16 列中删除这些 space 即
Column 15 | Column 16 **Currently**
01942 665432|07865346122
01942756423 |07855 333567
Column 15 | Column 16 **Needs to be**
01942665432|07865346122
01942756423|07855333567
我有一个快速而肮脏的脚本,不幸的是,它被证明一点也不快,因为它是一个 while 循环读取每一行,切割管道分隔符上的字段,将其分配给一个变量,在第 15 列上使用 sed & 16 仅去除空白 spaces 然后将其写入新文件即
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 条记录。
提前致谢。
是的,awk
更适合这里
$ cat ip.txt
a|foo bar|01942 665432|07865346122|123
b|i j k |01942756423 |07855 333567|90870
$ awk 'BEGIN{FS=OFS="|"} {gsub(" ","",); gsub(" ","",)} 1' ip.txt
a|foo bar|01942665432|07865346122|123
b|i j k |01942756423|07855333567|90870
BEGIN{FS=OFS="|"}
设置|
作为输入和输出字段分隔符gsub(" ","",)
仅将第 3 列的所有空格替换为空gsub(" ","",)
仅将第 4 列的所有空格替换为空1
打印输入记录的惯用方式(包括所做的任何修改)
将 3
和 4
更改为您需要的任何字段
如果第一行不受影响,添加一个条件
awk 'BEGIN{FS=OFS="|"} NR>1{gsub(" ","",); gsub(" ","",)} 1' ip.txt