yae*_*ael 5 sed awk perl text-processing
以下配置文件(示例 1)未按应有的方式配置。
文件中的每一行都应包含/grid/sdX( ato z),如示例 2 中所述。
我需要找到一种方法来为此任务编写 bash 脚本。如何在行/grid/sdX尾添加缺失的内容?
示例 1
more dfs_data_dir_mount.hist
/grid/sdk/hadoop/hdfs/data,/
/grid/sdi/hadoop/hdfs/data,/
/grid/sdh/hadoop/hdfs/data,/
/grid/sdc/hadoop/hdfs/data,/grid/sdc
/grid/sdj/hadoop/hdfs/data,/
/grid/sde/hadoop/hdfs/data,/grid/sde
/grid/sdd/hadoop/hdfs/data,/grid/sdd
/grid/sdb/hadoop/hdfs/data,/grid/sdb
/grid/sdf/hadoop/hdfs/data,/grid/sdf
/grid/sdg/hadoop/hdfs/data,/
Run Code Online (Sandbox Code Playgroud)
预期结果(示例 2)
/grid/sdk/hadoop/hdfs/data,/grid/sdk
/grid/sdi/hadoop/hdfs/data,/grid/sdi
/grid/sdh/hadoop/hdfs/data,/grid/sdh
/grid/sdc/hadoop/hdfs/data,/grid/sdc
/grid/sdj/hadoop/hdfs/data,/grid/sdj
/grid/sde/hadoop/hdfs/data,/grid/sde
/grid/sdd/hadoop/hdfs/data,/grid/sdd
/grid/sdb/hadoop/hdfs/data,/grid/sdb
/grid/sdf/hadoop/hdfs/data,/grid/sdf
/grid/sdg/hadoop/hdfs/data,/grid/sdg
Run Code Online (Sandbox Code Playgroud)
sed 解决方案:
sed -Ei 's~^(/[^/]+/[^/]+)(.*,)/$~\1\2\1~' dfs_data_dir_mount.hist
Run Code Online (Sandbox Code Playgroud)
~- 作为sed子命令分隔符处理[^/]+ - 匹配一个或多个字符(斜杠除外) /^ $ - 分别是行的开始和结束我能够使用以下 awk 命令完成此操作:
awk -F'/' '{OFS="/";}{print $1,$2,$3,$4,$5,$6,"grid",$3}' input
Run Code Online (Sandbox Code Playgroud)
awk
-F'/' - 分隔输入 /{OFS="/";} - 分隔输出 /{print $1,$2,$3,$4,$5,$6,"grid",$3}'- 打印/grid/sd*/hadoop/hdfs/data,/(从输入中获取的字段)和grid/sd*(grid再次手动输入和添加字段 3)awk:
awk -F/ -v OFS='/' '!$NF {$0=$0 $2 OFS $3}; 1'
Run Code Online (Sandbox Code Playgroud)
-F/ -v OFS='/' 将输入和输出字段分隔符设置为 /!$NF {$0=$0 $2 OFS $3}; 1如果最后一个字段为空,我们将重新构建所需格式的记录。1是真实的awk并且是打印记录。例子:
% cat file.txt
/grid/sdk/hadoop/hdfs/data,/
/grid/sdi/hadoop/hdfs/data,/
/grid/sdh/hadoop/hdfs/data,/
/grid/sdc/hadoop/hdfs/data,/grid/sdc
/grid/sdj/hadoop/hdfs/data,/
/grid/sde/hadoop/hdfs/data,/grid/sde
/grid/sdd/hadoop/hdfs/data,/grid/sdd
/grid/sdb/hadoop/hdfs/data,/grid/sdb
/grid/sdf/hadoop/hdfs/data,/grid/sdf
/grid/sdg/hadoop/hdfs/data,/
% awk -F/ -v OFS='/' '!$NF {$0=$0 $2 OFS $3}; 1' file.txt
/grid/sdk/hadoop/hdfs/data,/grid/sdk
/grid/sdi/hadoop/hdfs/data,/grid/sdi
/grid/sdh/hadoop/hdfs/data,/grid/sdh
/grid/sdc/hadoop/hdfs/data,/grid/sdc
/grid/sdj/hadoop/hdfs/data,/grid/sdj
/grid/sde/hadoop/hdfs/data,/grid/sde
/grid/sdd/hadoop/hdfs/data,/grid/sdd
/grid/sdb/hadoop/hdfs/data,/grid/sdb
/grid/sdf/hadoop/hdfs/data,/grid/sdf
/grid/sdg/hadoop/hdfs/data,/grid/sdg
Run Code Online (Sandbox Code Playgroud)