使用Shell脚本从txt文件中删除/替换无法打印的字符

时间:2018-12-01 20:05:13

标签: shell

我正在尝试从文件中的引号中删除换行符

我可以使用以下代码实现这一目标

awk -F"\"" '!length($NF){print;next}{printf("%s ", $0)}' filename.txt>filenamenew.txt

请注意,我正在创建一个新文件filenamenew.txt,这是可以避免的吗?我可以执行此命令,原因是文件很大。

我的文件用竖线分隔

sample input file
"id"|"name"
"1"|"john
doe"
"2"|"second
name
in the list"

使用上面的代码,我得到以下输出

"id"|"name"
 "1"|"john doe"
 "2"|"second name  in the list" 

但是我有一个很大的文件,我发现某些行在引号示例之间有^ M字符

second sample input file
    "id"|"name"
    "1"|"john
    doe"
    "^M2"|"second^M^M
    name
    in the list"
使用上述代码

o / p

"id"|"name"
 "1"|"john doe"
 name in the list"

所以基本上,如果一行中有一个^ M表示该字符串没有被打印,但是我在线阅读了^ M等于\ r,所以我用了 tr -d'\r'< filename.txt 我也尝试过

awk-F"|"{sub(/^M/,"")}1

但它没有删除那些字符(^ M)

我为什么要这样做的一些背景 我正在从关系表中提取数据并将其加载到平面文件中,并检查表和文件之间的计数是否匹配,但由于count(*)列中的\ n与文件中的wc-l不匹配。

最终解决方案:

从长远来看,我不想删除这些不可打印的字符,但希望将其替换为某些字符或值(以便在表和文件匹配之间进行计数),然后在我将其加载回表时再次用原来存在的\ n或^ M替换我作为占位符有效添加的值,这样就不会篡改我的数据。

任何建议都值得赞赏。

谢谢。

0 个答案:

没有答案