如何对文本文件进行排序和清理?

如何对文本文件进行排序和清理?

我有大量文本文件,其中包含诸如“BR”之类的愚蠢数据(BR 两边都有大于/小于符号,我已经从文件中删除了 BR,只需要逐行对其进行排序并删除重复项。我需要获取所有数据,每行都有自己的单个 xyz 域,将带有空格的行移动到各自的行中。

如果你已经喜欢了:

/temp/>$ cat temp.txt
 
243.abb.com www.243.abb.com mypassword.abb.com
pdc.owc.abb.com pdc.owc.test.abb.com pdc.template.abb.com pdc.template.dev.abb.com
ETC...
/temp/$> 某种脚本 tosort.sh temp.txt  
 (这将创建一个新文件 temp.new.txt)

你让它看起来像这样:

/temp/>$ cat temp.new.txt

243.abb.com
www.243.abb.com
mypassword.abb.com
pdc.owc.abb.com
pdc.owc.test.abb.com
pdc.template.abb.com
pdc.template.dev.abb.com
ETC....

答案1

由于您没有向我们展示文件中的实际内容(od -bc file.txt将显示每个字节),我假设条目之间只有空格。

tr ' ' "\n" file.txt | grep -Ev '^$'

其工作原理是将所有空格改为换行符(LF,0x0),然后删除所有空行。

答案2

一些选项:

  1. 用于grep -o在单独的行上输出每个非空白字符序列:

     grep -Eo '[^[:blank:]]+' temp.txt > temp.new.txt
    
  2. 使用 awk,以空格序列作为输入记录分隔符

     awk 1 RS='[[:space:]]+' temp.txt > temp.new.txt
    
  3. 使用带有默认输入分隔符的 awk,但将输出字段分隔符设置为换行符(类似于 #1 的 awk 实现)

     awk '{$1=$1}1' OFS='\n' temp.txt > temp.new.txt
    
  4. 使用 sed 将空白字符序列替换为换行符:

     sed -E 's/[[:blank:]]+/\n/g' temp.txt > temp.new.txt
    
  5. (可能是最有效的)用换行符替换空格,压缩重复

     tr -s '[:space:]' '\n' < temp.txt > temp.new.txt
    

相关内容