根据 unix 中的列值删除行



我需要从固定长度的文件中剪切行并将其粘贴到以 180 开头且位置 35 具有"N"的行的新文件中。我正在使用** bash **

**Sample input file:**
070000001                                                                                            075PRMAGDALENA F DEL                                                                                                  180AP997270518411                  Y02092014 
180AP997270518412                  N02092014 
180AP997270518413                  N03212013 
PAYMNT                                                                                               
190EM037490013798700                                                                                 
070000002                                                                                            075PRRERUCHA TROY A                                                                                                    195097130808020800                                                                                   070000003                                                                                            
180AP997270518423                  Y03212013 
**Sample input end**

代码

while IFS= read -r line
do
## var=$((var+1))
  if [ ${line:0:3} = '180' ] && [ ${line:34:1} = 'N' ]  ;
  then
    echo $line > online_error.txt
  else
    echo $line > online_good.txt
  fi
done <"$file"

代码结束

**

输出开始 **

180AP997270518423 N03212013

**

输出端 **在上面的输出中,空格丢失了。我希望我的输出与输入行具有相似的间距。在我的输入文件中,字母"N"的位置为 35,而 out 则将其定位为 19。

if 部分将输出写入文件,但是我丢失了格式。我需要保留原始格式,因为此脚本的输出是另一个大型机程序的输入。

请提供建议。

假设语句"位置 35 是 N"和"第二个字段以 N 开头"是等效的,您可以使用 awk 命令

awk '$1 ~ /^180/ && $2 ~ /^N/ {
       print $0 > "online_error.txt";
       next;
     }
     { print $0 > "online_good.txt" }' "$file"

您可以考虑以下替代方法:

cat b.txt | grep -E '^180.{32}N'  > newFile.txt

提取以180开头并在第 35 列中具有N的行;以及

cat b.txt | grep -E -v '^180.{32}N' > remainder.txt

对于所有其他人。

注意 - -E标志是在 Mac OS 上用于"扩展正则表达式"的标志。或者,您可以使用egrep - 然后您不需要该标志。我认为这在其他版本的Unix中是一样的。

如果您确定第二列中的字母始终是"空格后的第一个字母",您也可以尝试

egrep '^180.* N' < b.txt > newFile.txt

及其补充:

egrep -v '^180.* N' < b.txt > newFile.txt

相关内容

  • 没有找到相关文章

最新更新