unix - 我需要删除文本文件中每一行从位置 X 到位置 Y 的字符串

标签 unix awk sed textedit

我有一个巨大的平面文件,其中包含 10 万条记录,每条记录跨越 3000 列。在归档之前,我需要删除一段从起始位置 300 到位置 500 的数据。这是数据的敏感部分,需要在我归档之前删除。 我正在寻找可以为我解决问题的 awk 或 sed 或任何类似命令。

示例文件

003133780 MORNING GLORY DR                                        SOUTHAMPTON         PA18966780 MORNING GLORY DR    
0054381303 MADISON ST                                             RADFORD             VA241411303 MADISON ST         
00586728 CONESTOGA COURT                                          CHADDS FORD         PA1931728 CONESTOGA COURT      
1852921800 SAMER RD                                               MILAN               MI481601800 SAMER RD           
192717175 EVERGREEN CIRCLE                                        HENDERSONVILLE      TN37075175 EVERGREEN CIRCLE    
213673217 EAST BRANCH                                             LONGVIEW            TX75604217 EAST BRANCH         
2490423205 NOTTAGE LANE                                           FALLS CHURCH        VA220423205 NOTTAGE LANE       
249357344 BALOGH PLACE                                            LONGWOOD            FL32750344 BALOGH PLACE        
2502811224 WILFORD HOLLOW ROAD                                    VINTON              VA241791224 WILFORD HOLLOW ROAD
277634210 AMANDA CT                                               WHITEHOUSE          TX7579119726 COPPER OAKS DRIVE 
282482507 B ST.                                                   CHESAPEAKE          VA23324507 B ST.               

预期输出

003133780 MORNING GLORY DR                                        SOUTHAMPTON         PA780 MORNING GLORY DR    
0054381303 MADISON ST                                             RADFORD             VA1303 MADISON ST         
00586728 CONESTOGA COURT                                          CHADDS FORD         PA28 CONESTOGA COURT      
1852921800 SAMER RD                                               MILAN               MI1800 SAMER RD           
192717175 EVERGREEN CIRCLE                                        HENDERSONVILLE      TN175 EVERGREEN CIRCLE    
213673217 EAST BRANCH                                             LONGVIEW            TX217 EAST BRANCH         
2490423205 NOTTAGE LANE                                           FALLS CHURCH        VA3205 NOTTAGE LANE       
249357344 BALOGH PLACE                                            LONGWOOD            FL344 BALOGH PLACE        
2502811224 WILFORD HOLLOW ROAD                                    VINTON              VA1224 WILFORD HOLLOW ROAD
277634210 AMANDA CT                                               WHITEHOUSE          TX19726 COPPER OAKS DRIVE 
282482507 B ST.                                                   CHESAPEAKE          VA507 B ST.               

这里我去掉了位置89和95之间的字符。 一个小的变化,我还需要将变化的内容写入同一个文件。

下面是我目前的脚本。 我正在遍历所有文件,将它们分成最大行数为 20000 的文件,然后在归档之前从位置 X 和 Y 中删除字符。

ls -1 *.[tT][xX][tT] 中的当前文件名 做 echo $当前文件名 tempfilename=${currentfilename%%.*} awk -v A="$tempfilename"'{filename = A "Part"int((NR-1)/20000) ".txt";打印 >> 文件名}' $当前文件名 awk '{print substr($0,1,522) substr($0,953) >> 文件名}' $currentfilename mv $currentfilename $APP_ROOT/存档 完成

最佳答案

假设位置表示列,您可以使用cut 来选择您想要的列。

cut -f 1-299,501-3000 CutMe.txt

如果您的数据由逗号而不是制表符分隔,则使用 -d

cut -d, -f 1-299,501-3000 CutMe.txt

如果位置表示字符,您可以使用 cut -c 执行相同的操作。

cut -c 1-299,501-3000 CutMe.txt

关于unix - 我需要删除文本文件中每一行从位置 X 到位置 Y 的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25293481/

相关文章:

unix - UNIX 中的/dev/tty 是什么?

linux - 如何使 awk 输出更具可读性?

regex - 使用正则表达式从 fasta 文件中获取特定序列

sed - 如何让 Octave 更改输入文件中的变量?

awk - [SED/AWK]交换值

awk sed 根据上一行替换行上的空格

oracle 将 unix 纪元时间转换为日期

bash - 检查输入是否在 Conda 环境中

Node.js Mongoose 不以纯文本形式存储连接字符串

linux - 从 Linux 文件中删除特定的特殊字符串