ner*_*erd 3 awk text-processing split
我有一个包含以下内容的文件:
文件.txt:
661###############20160315###
###########################
###########################
661###############20160316###
###########################
661###############20160317###
###########################
Run Code Online (Sandbox Code Playgroud)
我想根据起始字符串“661”和日期(2016MMDD)将此单个文件拆分为多个文件,并将拆分文件重命名为 20160315.txt、20160316.txt 等。例如,每个拆分文件将具有:
20160315.txt 将有:
661###############20160315########
################################
################################
Run Code Online (Sandbox Code Playgroud)
20160316.txt 将有:
661###############20160316########
################################
Run Code Online (Sandbox Code Playgroud)
20160317.txt 将有:
661###############20160317#######
###############################
Run Code Online (Sandbox Code Playgroud)
是否有一个 awk 命令可以做到这一点?
我确信有一个awk
命令可以做到这一点,我不够熟练,awk
无法提出解决方案。与此同时,你可以使用这样的东西:
#!/bin/bash
csplit -z tosplit /661/ {*}
for file in xx*; do
newName=$(egrep -o '2[0-9]{7}' $file)
mv $file $newName.txt
done
rm -rf xx*
Run Code Online (Sandbox Code Playgroud)
tosplit
这个文件在哪里(你的示例文件):
661###############20160315###
###########################
###########################
661###############20160316###
###########################
661###############20160317###
###########################
Run Code Online (Sandbox Code Playgroud)
运行此脚本后(在与tosplit
文件相同的目录中)我得到三个文件:
ls 2016031*
20160315.txt 20160316.txt 20160317.txt
Run Code Online (Sandbox Code Playgroud)
...看起来像这样:
cat 20160315.txt
661###############20160315###
###########################
###########################
cat 20160316.txt
661###############20160316###
###########################
cat 20160317.txt
661###############20160317###
###########################
Run Code Online (Sandbox Code Playgroud)
您也可以(?)csplit
用来命名文件,但这也超出了我的薪水!